我发现了类似的问题,但这一个特别。我已经尝试了几种不同的方法,但我不能使它工作。完全与事件的菜鸟!我不明白如何引用小部件,我猜......应用程序只是连接到一个数据库,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()
字符串
1条答案
按热度按时间5n0oy7gb1#
当你将一个事件绑定到一个函数时,函数会自动传递一个表示该事件的对象。在该事件对象中,你可以通过
widget
属性获得对小部件的引用。所以,第一步是定义函数来接受这个事件对象,并使用
widget
属性来访问获取事件的入口小部件:字符串
接下来,通过删除
lambda
并直接引用函数来定义绑定:型