我相信我的节目在冻结后冻结:
if pressed(win.getMouse(), startImage):
task = 'start'
timeFormat()
基本上,我尝试做的是当鼠标点在stopImage上时,计时器将停止,当鼠标点击在lapTimer上时,它将重置。当我拿出
timeFormat()
程序将运行一段时间然后中断。我的停止和启动按钮工作,但不是我的圈按钮。如何让它在按下停止按钮后不停止程序?这样我可以重新开始或重置?
def pressed(pt, image):
width = image.getWidth()
height = image.getHeight()
anchor = image.getAnchor()
x1 = (anchor.getX()) - (.5 * width)
x2 = (anchor.getX()) + (.5 * width)
y1 = (anchor.getY()) - (.5 * height)
y2 = (anchor.getY()) + (.5 * height)
return(x1 <= pt.getX() <= x2 and y1 <= pt.getY() <= y2)
def timeFormat():
sec = 0
minute = 0
hour = 0
timeDisplay = "{0:02d}:{1:02d}:{2:02d}".format(hour, minute, sec)
timer.setText(timeDisplay)
while task == 'start':
task = 'start'
time.sleep(1)
sec += 1
if sec == 60:
sec = 0
minute += 1
if minute == 60:
sec = 0
minute = 0
hour += 1
timeDisplay = "{0:02d}:{1:02d}:{2:02d}".format(hour, minute, sec)
timer.setText(timeDisplay)
check = win.checkMouse()
if check != None:
if pressed(check, stopImage):
task = 'stop'
print('asd')
if pressed(check, startImage):
task = 'start'
if pressed(check, lapImage):
sec = 0
minute = 0
hour = 0
task = 'stop
def main():
while not pressed(win.getMouse(), startImage):
if task == 'stop':
break
if task == 'reset':
sec = 0
minute = 0
hour = 0
break
continue
timeFormat()
main()
答案 0 :(得分:0)
您的timeFormat
函数永远不会返回,因此调用代码无法继续。
您的主循环的条件为while sec < 60
,但每次sec
递增到60
时,它都会重置为零。这意味着循环永远不会结束。
当你期望它结束时,我不清楚,所以我不能告诉你如何解决这个问题,但通常在编写交互式程序时不是一个好主意。有多个事件循环,除非你有一个明确定义的结构来切换它们。
你有很多循环,当其中一个循环运行时,所有其他循环都必然会等待。尝试将一些逻辑从单独的循环移动到可以从单个主循环调用的其他函数。
答案 1 :(得分:0)
我所要做的就是切换一些if语句。