为什么我的标签不是自我更新?

时间:2017-05-18 16:34:25

标签: python tkinter label

我在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()

1 个答案:

答案 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的值一起使用。