Python - Tkinter - 标签不更新

时间:2016-09-22 11:14:17

标签: python tkinter label

为什么leftresult_label标签没有更新的任何想法?该功能似乎有效,但标签不会更新。我到处寻找,无法找到答案。 '离开'值已设置但标签不会更改。

from tkinter import *

root = Tk(className="Page Calculator")

read = IntVar()

total = IntVar()

left = IntVar()

read.set(1)

total.set(1)

left.set(1)

read_label = Label(root,text="Pages Read:")
read_label.grid(column=1, row=1)

total_label = Label(root,text="Total Pages:")
total_label.grid(column=1, row=2)

read_entry = Entry(root,textvariable=read)
read_entry.grid(column=2, row=1)

total_entry = Entry(root,textvariable=total)
total_entry.grid(column=2, row=2)

def func1():
    left.set(total.get() - read.get())
    print(left.get())

calculate_button = Button(root,text="Calculate",command= func1)
calculate_button.grid(column=2, row=3)

percenet_label = Label(root,text="Percent Finished:")
percenet_label.grid(column=1, row=4)

left_label = Label(root,text="Pages Left:")
left_label.grid(column=1, row=5)

percenetresult_label = Label(root,text=left.get())
percenetresult_label.grid(column=2, row=4)

leftresult_label = Label(root,text="")
leftresult_label.grid(column=2, row=5)

root.mainloop()

3 个答案:

答案 0 :(得分:1)

要使该功能完成工作,您宁愿拥有自己的标签:

leftresult_label = Label(root, textvariable=left)

一旦它成为tkinter类变量,tkinter会在您更改值时注意。单击按钮后,

def func1():
    left.set(total.get() - read.get())
    percent.set(int(read.get()*100/total.get()))

left和percent值,它们是tkinter.IntVar()类的实例,对小部件(在这种情况下为标签)具有不可影响的效果,其中这些值设置为textvariable,就像在Entry小部件中一样。

以下是完整代码:

from tkinter import *

root = Tk(className="Page Calculator")
read = IntVar()
total = IntVar()
left = IntVar()
percent = IntVar()

read.set(1)
total.set(1)
left.set(1)
percent.set(1)

def func1():
    left.set(total.get() - read.get())
    percent.set(int(read.get()*100/total.get()))

read_label = Label(root,text="Pages Read:")
read_label.grid(column=1, row=1)

read_entry = Entry(root,textvariable=read)
read_entry.grid(column=2, row=1)

total_label = Label(root,text="Total Pages:")
total_label.grid(column=1, row=2)

total_entry = Entry(root,textvariable=total)
total_entry.grid(column=2, row=2)


calculate_button = Button(root,text="Calculate",command= func1)
calculate_button.grid(column=2, row=3)

percenet_label = Label(root,text="Percent Finished:")
percenet_label.grid(column=1, row=4)

left_label = Label(root,text="Pages Left:")
left_label.grid(column=1, row=5)

percenetresult_label = Label(root,textvariable=percent)
percenetresult_label.grid(column=2, row=4)

leftresult_label = Label(root,textvariable=left)
leftresult_label.grid(column=2, row=5)

root.mainloop()

答案 1 :(得分:1)

代码,包括进度条。 update_idletasks()用于保持标签和进度栏运行。

from tkinter import *
from tkinter import ttk
root = Tk()
root.title('Counter Test')
root.iconbitmap('IT.ico')
root.geometry("800x400")

def missing():
    while i < 100:                        
        progress1['value'] = i 
        label1.config(text=progress1['value'])
        root.update_idletasks()
        i += 1
        
progress1 = ttk.Progressbar(root, orient=HORIZONTAL, length=250, mode='determinate')
progress1.pack(pady=15)

label1 = Label(root, text="")
label1.pack(pady=15)

button_1 = Button(root, text="Missing", command=missing)
button_1.pack(pady=15)

button_q = Button(root, text="Quit", command=root.destroy)
button_q.pack(pady=15)

root.mainloop() 

答案 2 :(得分:0)

因此可以立即更新控件,例如更新标签和TreeView元素,此代码对我有用。

窗口= tk.Tk()

window.update_idletasks()