从 StringVar 更新 Tkinter 标签发生延迟
Updating Tkinter label from a StringVar happens on a delay
我有一个绑定到 tkinter StringVar 的 tkinter 标签对象,原则上应该在 StringVar 更改时更新它。这是声明:
self.db_info_string = tk.StringVar()
self.db_info_string.set('Number of events: ' +str(len(self.eventsdb_subset)))
self.db_info_display = tk.Label(parent, textvariable=self.db_info_string)
在我的 GUI 的其他地方,我有一个按钮,按下时会调用此函数:
def filter_db(self):
filterstring = self.filter_entry.get()
print filterstring
eventsdb_subset = self.eventsdb_subset
self.eventsdb_subset = sqldf('SELECT * from eventsdb_subset WHERE %s' % filterstring,locals())
self.db_info_string.set('Number of events: ' +str(len(eventsdb_subset)))
(我知道在这样的数据库中使用原始输入的问题 - 目前这只是为了测试目的,为了掌握 GUI 编程的窍门,并且会在它看到之前进行清理天)
你可以看到StringVar的值在这个函数调用中改变了。但是,直到第二次调用此函数时,标签文本才会更新 - 即,标签文本滞后于一次调用此函数时应显示的实际值。
有没有办法强制标签在 filter_db() 中更新?
eventsdb_subset = self.eventsdb_subset
self.eventsdb_subset = sqldf('SELECT * from eventsdb_subset WHERE %s' % filterstring,locals())
self.db_info_string.set('Number of events: ' +str(len(eventsdb_subset)))
eventsdb_subset
和 self.eventsdb_subset
是自变量。分配给一个不会改变另一个的值。
在第三行,eventsdb_subset
仍然具有您 运行 self.eventsdb_subset = sqldf(...)
之前的值。换句话说,它总是会滞后一个 select
操作。
使用 self.eventsdb_subset
的值而不是 eventsdb_subset
更新 StringVar。
eventsdb_subset = self.eventsdb_subset
self.eventsdb_subset = sqldf('SELECT * from eventsdb_subset WHERE %s' % filterstring,locals())
self.db_info_string.set('Number of events: ' +str(len(self.eventsdb_subset)))
我有一个绑定到 tkinter StringVar 的 tkinter 标签对象,原则上应该在 StringVar 更改时更新它。这是声明:
self.db_info_string = tk.StringVar()
self.db_info_string.set('Number of events: ' +str(len(self.eventsdb_subset)))
self.db_info_display = tk.Label(parent, textvariable=self.db_info_string)
在我的 GUI 的其他地方,我有一个按钮,按下时会调用此函数:
def filter_db(self):
filterstring = self.filter_entry.get()
print filterstring
eventsdb_subset = self.eventsdb_subset
self.eventsdb_subset = sqldf('SELECT * from eventsdb_subset WHERE %s' % filterstring,locals())
self.db_info_string.set('Number of events: ' +str(len(eventsdb_subset)))
(我知道在这样的数据库中使用原始输入的问题 - 目前这只是为了测试目的,为了掌握 GUI 编程的窍门,并且会在它看到之前进行清理天)
你可以看到StringVar的值在这个函数调用中改变了。但是,直到第二次调用此函数时,标签文本才会更新 - 即,标签文本滞后于一次调用此函数时应显示的实际值。
有没有办法强制标签在 filter_db() 中更新?
eventsdb_subset = self.eventsdb_subset
self.eventsdb_subset = sqldf('SELECT * from eventsdb_subset WHERE %s' % filterstring,locals())
self.db_info_string.set('Number of events: ' +str(len(eventsdb_subset)))
eventsdb_subset
和 self.eventsdb_subset
是自变量。分配给一个不会改变另一个的值。
在第三行,eventsdb_subset
仍然具有您 运行 self.eventsdb_subset = sqldf(...)
之前的值。换句话说,它总是会滞后一个 select
操作。
使用 self.eventsdb_subset
的值而不是 eventsdb_subset
更新 StringVar。
eventsdb_subset = self.eventsdb_subset
self.eventsdb_subset = sqldf('SELECT * from eventsdb_subset WHERE %s' % filterstring,locals())
self.db_info_string.set('Number of events: ' +str(len(self.eventsdb_subset)))