首页 文章

从StringVar更新Tkinter标签会发生延迟

提问于
浏览
0

我有一个tkinter标签对象绑定到一个tkinter StringVar,原则上它应该在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的值 . 但是,Label文本在第二次调用此函数之前不会更新 - 即标签文本滞后于通过一次调用此函数应显示的实际值 .

有没有办法强制Label在filter_db()中更新?

1 回答

  • 1
    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_subsetself.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)))
    

相关问题