值在GUI中更新

时间:2017-09-07 17:25:15

标签: python user-interface tkinter

我正在使用tkinter为GUI编写一个简单的代码。我的问题是,我希望在名为t1的标签中打印一个数字,始终更新为给定的两个条目的总和。当然我不能在条目上使用.get方法,因为我在调用方法时会修复这些值,但是我不知道如何使用其他Intvar构建一个新的(总是更新的)IntVar。

from tkinter import *
window=Tk()

p1_in=StringVar()
p1=Entry(window,textvariable=p1_in)

p2_in=StringVar()
p2=Entry(window,textvariable=p2_in)

t1=Label(window,textvariable=(p1_in+p2_in))    # of course this doesn't work
t1.grid(row=7,column=2)

window.mainloop()

如何使标签t1始终以p1_in + p2_in的总和更新? 我知道他们是StringVar,但输出对我的意图更好,加上我不认为这是主要问题

1 个答案:

答案 0 :(得分:1)

您可以使用StringVar的跟踪方法。在值更改后立即调用它。

from tkinter import *
window=Tk()

def calculate(*args):
    if p1_in.get() and p2_in.get(): #checks if both are not empty
        try:
            ans = int(p1_in.get()) + int(p2_in.get())
            t1_out.set(str(ans))
        except ValueError:
            t1_out.set("Enter integers!")

p1_in=StringVar()
p1=Entry(window,textvariable=p1_in)
p1_in.trace("w", calculate)

p2_in=StringVar()
p2=Entry(window,textvariable=p2_in)
p2_in.trace("w", calculate)

t1_out=StringVar()

t1=Label(window,textvariable=t1_out) #also note that used another variable for output
t1.grid(row=7,column=2)
p1.grid(row=5,column=2)
p2.grid(row=6,column=2)

window.mainloop()