magento Tkinter.点击或聚焦时清除条目小部件

nc1teljy  于 11个月前  发布在  其他
关注(0)|答案(1)|浏览(106)

我发现了类似的问题,但这一个特别。我已经尝试了几种不同的方法,但我不能使它工作。完全与事件的菜鸟!我不明白如何引用小部件,我猜......应用程序只是连接到一个数据库,for循环创建一个标签,一个条目和一个按钮,用于表中的每一列,这将允许在数据库中插入新的行。我想默认的条目小部件为0,但我想尽快清除0用户点击或关注的小部件。

def confirm_ad_table():
    global widget_list

    #Create connection
    conn = sqlite3.connect('home_finance_database - Copia')
    #Create cursor
    c = conn.cursor()

    def clear_zero(widget):
        if widget.get() == '0':
            widget.delete(0, END)
                      
    c.execute(f"PRAGMA table_info ({entry_ad_table.get()})")
    column_list = [column[1] for column in c.fetchall()]

    for widget in widget_list:
        widget.destroy()
    #In Chat GPT's words: "If you destroy the widget the list still contains them. You need to clear the list""
    widget_list = []

    for col in column_list:
        lab_widget = Label(tab2, text=col)
        entry_widget = Entry(tab2, width=35)
        btn_widget = Button(tab2, text="Submit")

        entry_widget.bind("<FocusIn>", lambda: clear_zero(entry_widget))
        entry_widget.bind("<Key>", lambda: clear_zero(entry_widget))    

        widget_list.append(lab_widget)
        widget_list.append(entry_widget)
        widget_list.append(btn_widget)
    

    for num, widget in enumerate(widget_list):
        if type(widget) == Label:
            widget.grid(row=num+2, column=0)
        elif type(widget) == Entry:
            widget.grid(row=num+1, column=1)
            widget.insert(0, "0")
        elif type(widget) == Button:
            widget.grid(row=num, column=2)

    #Commit changes
    conn.commit()
    #Close connection
    conn.close()

字符串

5n0oy7gb

5n0oy7gb1#

当你将一个事件绑定到一个函数时,函数会自动传递一个表示该事件的对象。在该事件对象中,你可以通过widget属性获得对小部件的引用。
所以,第一步是定义函数来接受这个事件对象,并使用widget属性来访问获取事件的入口小部件:

def clear_zero(event):
    if event.widget.get() == '0':
        event.widget.delete(0, END)

字符串
接下来,通过删除lambda并直接引用函数来定义绑定:

entry_widget.bind("<FocusIn>", clear_zero)
entry_widget.bind("<Key>", clear_zero)

相关问题