【问题标题】:Updating Tkinter label from a StringVar happens on a delay从 StringVar 更新 Tkinter 标签发生延迟
【发布时间】:2015-09-10 14:29:07
【问题描述】:

我有一个绑定到 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的值在这个函数调用中发生了变化。但是,标签文本直到第二次调用此函数才更新 - 即,标签文本滞后于一次调用此函数应显示的实际值。

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

【问题讨论】:

    标签: python python-2.7 user-interface tkinter label


    【解决方案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)))
    

    【讨论】:

    • 嗯,这很尴尬......谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-26
    • 1970-01-01
    • 1970-01-01
    • 2011-02-05
    • 1970-01-01
    • 1970-01-01
    • 2017-04-12
    相关资源
    最近更新 更多