【发布时间】:2019-06-16 22:12:36
【问题描述】:
您好,首先让我说我是这方面的新手,最近开始学习 Python,目前正在学习 Tkinter 以制作一些 GUI 应用程序。
我在这里构建了一个非常简单的秒表应用程序,其中包含开始、停止和清除按钮。一切正常,除了我遇到一个函数被另一个不应该调用它的按钮随机调用的问题。
boolean start 默认设置为 True。当您单击“开始”按钮时,它会调用检查 start 是否为 True 的 starter 函数,如果是,它会启动一个计数器。当您按下“停止”按钮时,它会调用一个停止函数,该函数只是通过将 start 更改为 False 来停止计数器。当您单击“清除”按钮时,它会调用一个更清晰的函数,该函数会重置秒和分钟值并将开始更改为 True(这样如果计数器函数被“开始”按钮调用,它就可以继续)。
我遇到的问题是,如果您单击“停止”然后快速单击“清除”,它会出于某种原因激活计数器功能并开始计数。我不明白为什么会这样,因为理论上它应该只在按下“开始”按钮时调用该函数。
我尝试过使用不同的布尔触发器,例如“start is not False”之类的东西,但没有运气。
secs = -1
mins = 0
start = True
def counter():
global secs, mins, start
if start is True:
seclabel.after(1000, counter)
secs += 1
if secs == 60:
secs = 0
mins += 1
minlabel.configure(text=str(mins))
seclabel.configure(text=str(secs))
startbutt.configure(state=DISABLED, bg="grey")
stopbutt.configure(state=NORMAL, bg="red")
def stopper():
global start
start = False
stopbutt.configure(state=DISABLED, bg="grey")
clearbutt.configure(state=NORMAL, bg="blue")
def clearer():
global start, secs, mins
secs = -1
mins = 0
minlabel.configure(text="0")
seclabel.configure(text="0")
clearbutt.configure(state=DISABLED, bg="grey")
startbutt.configure(state=NORMAL, bg="green")
start = True
stopbutt = Button(window, text="Stop", bg="grey", fg="white", font="arial 15 bold", command=stopper, state=DISABLED)
stopbutt.grid(row=2, column=1, pady=20, padx=20)
clearbutt = Button(window, text="Clear", bg="grey", fg="white", font="arial 15 bold", command=clearer, state=DISABLED)
clearbutt.grid(row=3, column=1, pady=20, padx=20)
startbutt = Button(window, text="Start", bg="green", fg="white", font="arial 15 bold", command=counter, state=NORMAL)
startbutt.grid(row=2, column=0, pady=20, padx=20)
理想情况下清除按钮不应该接触计数器功能,所以我不知道发生了什么。
【问题讨论】: