Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python GUI中的值更新_Python_User Interface_Tkinter - Fatal编程技术网

Python GUI中的值更新

Python GUI中的值更新,python,user-interface,tkinter,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() p

我正在使用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,但这样的输出更符合我的意图,而且我不认为这是主要问题

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

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