【发布时间】:2021-12-24 12:03:22
【问题描述】:
我正在尝试使用 Tkinter 创建一个简单的计算器,但我遇到了一个问题。先看相关代码:
entry_text = StringVar()
inout = Entry(root, textvariable=entry_text)
inout.grid(row=0, column=0, columnspan=4, sticky="nsew")
def equals():
print("Equal button is clicked")
get_answer = True
def divide():
tempvar = entry_text.get()
num1 = int(tempvar)
entry_text.set("")
while get_answer == False:
tempvar2 = entry_text.get()
try:
num2 = int(tempvar2)
except ValueError:
num2 = 0
print("I'm out of the loop.")
answer = num1 / num2
entry_text.set(answer)
在这里,我正在为divide 按钮创建一个函数。该按钮的功能是每当您单击该按钮时,它会获取entry_text 变量的瞬时值,将其存储在一个临时变量中并重置entry_text 变量的值。然后它运行一个循环来收集entry_text 的下一个值,直到单击相等按钮。但问题就在这里。每当我单击divide 按钮时,GUI 都会变得无响应,并且我无法为除法运算输入下一个值并退出循环。
谁能帮忙?
【问题讨论】:
-
while get_answer == False:中断mainloop。只要 while 循环运行,就不会发生任何事件。 -
首先避免在 tkinter 应用程序中使用 while 循环,因为它会阻止 tkinter 处理未决事件。其次,您在
equals()内创建局部变量get_answer,而不是更新全局变量(假设有一个)。 -
@acw1668 您的假设是正确的,但是您能否以详细答案的形式告诉我该怎么做,因为您的第二行答案有点混乱?
-
@acw1668 还有我应该使用什么样的方法来实时更新临时变量,Entry对象中有没有类似ontextchanged之类的方法?
标签: python python-3.x tkinter tk