简体   繁体   English

Python - Tkinter - 标签未更新

[英]Python - Tkinter - Label Not Updating

Any ideas why the leftresult_label label does not update?为什么 leftresult_label 标签不更新的任何想法? The function seems to work but the label does not update.该功能似乎有效,但标签未更新。 I have looked everywhere and can't find an answer.我到处找,找不到答案。 The 'left' value gets set but the label does not change. 'left' 值被设置但标签不会改变。

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

To make the function do the job, you'd rather have your label:为了让函数完成这项工作,您宁愿拥有自己的标签:

leftresult_label = Label(root, textvariable=left)

Once it's tkinter class variable, tkinter takes care about when you change the value.一旦它是 tkinter 类变量,tkinter 就会在您更改值时负责。 Once you click the button,点击按钮后,

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

left and percent values, which are instances of tkinter.IntVar() class have immidiate effect on widgets (labels in this case) where those values are set as textvariable, just as you have it at Entry widgets. left 和 percent 值,它们是 tkinter.IntVar() 类的实例,对这些值设置为 textvariable 的小部件(在这种情况下为标签)具有直接影响,就像您在 Entry 小部件中拥有的一样。

Here is full code:这是完整的代码:

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

code including progress bar.包括进度条的代码。 update_idletasks() used to keep label and progress bar running. 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() 

so to update controls immediately, like updating labels and TreeView elements this code worked for me.所以要立即更新控件,比如更新标签和 TreeView 元素,这段代码对我有用。

window = tk.Tk()窗口 = tk.Tk()

window.update_idletasks() window.update_idletasks()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM