如何从条目(Tkinter)获取价值,在公式中使用它并将结果打印在标签

时间:2016-12-20 15:04:28

标签: python tkinter get tkinter-entry

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

1 个答案:

答案 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文档,无论如何)