2015-07-20 93 views
0

我的计数器不会停止。当我第二次启动时,我希望它继续计数,而不是重新启动。Tkinter程序的行为不像我认为的那样

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

描述性变量和方法名称真的会在这种情况下有所帮助:) –

+0

你是什么意思对不起,如果它明显,但即时通讯新编码大部分这个我只是从其他网站一起凝结和理解 – PLP123

+3

我可以弄清楚你的代码函数,但使用诸如“timer_status”而不是“a”或“seconds”而不是“x”的描述性变量名称,确实使编程变得光荣。这是一个很好的提示,因为你是新的:) –

回答

1

这里有两个问题。更大,更明显的一个是范围的问题。

简单的答案是,你只需要两条额外的线来解决这个问题。

def start(): 
global Counter_Activation_Variable # add this 
Counts=0 
... 
def stop(): 
global Counter_Activation_Variable # and this 
Counter_Activation_Variable = 5 

如果你不这样做,可变Counter_Activation_Variablestart()方法是指在不同的变量,恰巧也有名字Counter_Activation_Variablestop()方法,它是由一个完全独立的内部第三个变量在全球范围内也被命名为Counter_Activation_Variable

这是因为Python允许您仅在特定区域(称为范围)中引用变量。因此,函数中定义的变量只存在于该函数内。如果要写入全局变量,则必须将其明确标记为全局变量。 (Python可以直接从全局变量中读取,而不必先声明它在函数内部)

第二个函数,我之前提到的是线程问题。我在考虑start()中的while循环将占用所有的计算时间,因此,即使再次单击该按钮时,stop()方法可能无法正确执行。

但是,我对TKinter知之甚少,不知道它是否为您处理那种GUI多线程 - 它可以。

+0

非常感谢你像梦一样工作 – PLP123

+0

我还使用了'Counts'的全局开始恢复,而不是重新启动计数器 – PLP123

相关问题