我的柜台不会停止。当我第二次点击开始时,我希望它继续计数而不是重新启动。
from tkinter import *
master = Tk()
Counter_Activation_Variable=3
def start():
Counts=0
Counter_Activation_Variable=0
button.configure(text = "Stop", command=stop)
while Counter_Activation_Variable == 0:
Counts = Counts+1
Textbox.delete(1.0, END)
Textbox.insert(END,(Counts))
master.update()
def stop():
Counter_Activation_Variable=5
button.configure(text = "Start", command=start)
master.update()
button = Button(master, text="Start",command=start, bg="grey")
button.pack(side='bottom', fill='none', expand=False, padx=4, pady=4)
master.title("Stopwatch")
Textbox = Text(master, height=1, width=175)
Textbox.pack(side='top', fill='none', expand=False, padx=4, pady=4)
master.mainloop()
答案 0 :(得分:1)
这里有两个问题。更大,更明显的是范围问题。
简短的回答是你只需要两条额外的线来解决这个问题。
def start():
global Counter_Activation_Variable # add this
Counts=0
...
def stop():
global Counter_Activation_Variable # and this
Counter_Activation_Variable = 5
如果你不这样做,那么<{1}} 里面的变量Counter_Activation_Variable
start()
方法会引用另一个同样具有名称{{1}的变量Counter_Activation_Variable
方法内部,它与名为stop()
的全局范围中的第三个变量完全分开。
这是因为Python允许您仅在特定区域(称为范围)中引用变量。因此,函数中定义的变量仅存在于该函数内。如果要写入全局变量,则必须将其明确标记为全局变量。 (Python允许您直接从全局变量中读取而不首先在函数内声明它)
我之前提到过的第二个函数是线程问题。我认为Counter_Activation_Variable
中的while循环将占用所有的计算时间,因此,即使再次单击该按钮,start()
方法也可能无法正确执行。
但是,我不太了解TKinter是否知道它是否为您处理那种GUI多线程 - 它很可能。