我在update_idletasks()上阅读了很多帖子。我以为我明白了,我把它添加到代码中。该标签应该显示#3,因为我只有3行记录,而且它没有。
我确实使用了一个按钮,标签可以工作,但是update_idletask()没有。
有没有办法不使用按钮通过使用update_idletasks()使这个标签自我更新?
我认为它不起作用,因为它没有进入循环? 请指导我。
import sqlite3
import tkinter as t
import time
class SampleApp(t.Tk):
def __init__(self,parent):
t.Tk.__init__(self,parent)
self.parent=parent
self.initialize()
def initialize(self):
self.grid()
#GUI-------------------------------------
self.labelVariable=t.StringVar()
self.label=t.Label(self, textvariable=self.labelVariable, bg="yellow", width=50, height=20)
self.label.pack(fill=t.X, expand=1)
#self.button=t.Button(self, text="get status", pady=5, command=self.status)
#self.button.pack(anchor=t.S, fill=t.X, expand=1)
#formula______________________________________
def status(self):
conn=sqlite3.connect("employees.db")
cursor=conn.cursor()
cursor.execute("SELECT COUNT(*) FROM Company")
self.labelVariable.set(cursor.fetchone()[0])
self.update_idletasks()
self.after(0,self.status)
app = SampleApp(None)
app.mainloop()
答案 0 :(得分:0)
您只需致电self.status()
....并且self.update_idletasks()
没有必要。如果你要打开一个连接,你也必须关闭它。
将您的班级更改为:
class SampleApp(t.Tk):
def __init__(self,parent):
t.Tk.__init__(self,parent)
self.parent=parent
self.initialize()
def initialize(self):
self.grid()
self.labelVariable=t.StringVar()
self.label=t.Label(self, textvariable=self.labelVariable, bg="yellow", width=50, height=20)
self.label.pack(fill=t.X, expand=1)
self.status()
def status(self):
conn=sqlite3.connect("employees.db")
cursor=conn.cursor()
cursor.execute("SELECT COUNT(*) FROM Company")
self.labelVariable.set(cursor.fetchone()[0])
conn.close()
self.after(10,self.status)
注意:对于.after
参数(单位为ms),不应将delay
与0或几乎任何小于10的值一起使用。