Python - Tkinter - 标签未更新

Python - Tkinter - Label Not Updating

知道为什么 leftresult_label 标签没有更新吗?该功能似乎有效,但标签没有更新。我到处都看过,找不到答案。 '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()

要使函数完成工作,您宁愿使用标签:

leftresult_label = Label(root, textvariable=left)

一旦它是 tkinter class 变量,tkinter 就会关心您何时更改值。单击按钮后,

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

left 和 percent 值,它们是 tkinter.IntVar() class 的实例,对小部件(在本例中为标签)有直接影响,其中这些值设置为文本变量,就像您拥有的一样在条目小部件。

完整代码如下:

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

包含进度条的代码。 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() 

所以要立即更新控件,例如更新标签和 TreeView 元素,这段代码对我有用。

window = tk.Tk()

window.update_idletasks()