from Tkinter import *
top=Tk()
用户将输入的第一个值
A = Entry(top)
A.grid(row=1, column=1)
用户也输入的第二个值
B = Entry(top)
B.grid(row=1, column=2)
计算 - 现在我想添加这些值(最好是带小数点的值)
A1=float(A.get())
B1=float(B.get())
C1=A1+B1
结果 - 我希望python计算结果并在输入前两个值
时显示给用户C = Label(textvariable=C1)
C.grid(row=1, column=3)
top.mainloop()
答案 0 :(得分:1)
首先,欢迎来到StackOverflow和好工作 - 您的代码(大部分)都是您希望它做的一切!时机刚刚关闭 - 您创建对象并获取值,但用户尚未输入该值。
要解决这个问题,您需要将.get()
放在一个函数中,并且应该使用每个set()
之后的实际文本变量(如果你只是使用C1 =(浮点数),你最终会制作新浮点数,因此Label不会指向右边的那个。)
(setup... )
B.grid(...)
C1 = Tkinter.StringVar()
C = Label(textvariable=C1) # Using a StringVar will allow this to automagically update
def setC():
A1=float(A.get())
B1=float(B.get())
C1.set(str(A1+B1))
此外,您需要设置此功能,以便在运行程序时立即停止运行"。执行此操作的简单方法是让函数调用自身.after()
一段时间(以毫秒为单位)。
def setC():
# Body above
top.after(1000, setC) # Call setC after 1 second, so it keeps getting called.
setC() # You have to call it manually once, and then it repeats.
稍微更高级和更有效的更新方法涉及事件和绑定(每次更改A1或B1时绑定setC()
),但是对此的写入很长,所以我会给你提示并发送给你一些documentation。 (Effbot是一个很好的tkinter文档,无论如何)