【问题标题】:retrieve from database dynamically to tkinter gui从数据库动态检索到 tkinter gui
【发布时间】:2015-08-30 13:00:36
【问题描述】:

我是 python tkinter 中 gui 开发的新手。我想做的只是听数据库表,当有插入时,我只想将它显示在 gui 中。目前我有以下代码不起作用:

from Tkinter import *;
from db.Database import Database
import time

root = Tk();

topFrame = Frame(root)
topFrame.pack()
bottomFrame = Frame(root)
bottomFrame.pack(side=BOTTOM)
logLabel = Label(topFrame, text="Log")
logField = Text(topFrame,bd=5)
logLabel.pack(side=LEFT)
logField.pack(side=LEFT)

d = Database(user='test',password='test',db='test')
prev = d.getLastLog()
logField.insert('1.0',str(prev)+'.\n')

root.mainloop()


while True:
    log = d.getLastLog()
    if (log[0] != prev[0]):
        logField.config(state=NORMAL)
        logField.insert('1.0',str(log)+'.\n')
        logField.config(state=DISABLED)
        prev = log
    time.sleep(1)

【问题讨论】:

  • 您似乎遗漏了一些代码。您的代码以 "time.sleep("
  • 非常抱歉,我现在修好了

标签: python tkinter


【解决方案1】:

tkinter 拼写while True: ... time.sleep(n) 的方式是def callback(): ... root.after(n*1000, callback) + 在def 之后的附加调用。在你的情况下:

interval = 1000 # 1 second
def update():
    log = d.getLastLog()
    if (log[0] != prev[0]):
        logField.config(state=NORMAL)
        logField.insert('1.0',str(log)+'.\n')
        logField.config(state=DISABLED)
        prev = log
    root.after(interval, update)
root.after(interval, update)

把它放在 root.mainloop 调用之前。对于另一个(经过测试的)示例,请参阅我今天早些时候提供的 similar answer

【讨论】:

    【解决方案2】:

    根本问题是

    root.mainloop()
    

    在根窗口关闭或销毁之前不会返回。因此,您必须将轮询间隔转换为重复事件,mainloop 可以像处理任何其他 UI 事件一样处理该事件。在这种情况下,@TerryJanReedy 写了一个很好的答案,解释了如何但没有解释为什么。太重述另一个答案的核心:

    def update():
        # read database and update tkinter widgets
        # then reset the timer callback 
        root.after(interval, update)
    
    root.after(interval, update) # kickstart the update loop
    root.mainloop()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-16
      • 2012-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-09
      相关资源
      最近更新 更多