【问题标题】:How to keep a function going after different function has been called?在调用不同的函数后如何保持函数运行?
【发布时间】:2016-12-10 05:27:30
【问题描述】:

我相信我的程序在以下情况后冻结:

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

【问题讨论】:

标签: python python-3.x


【解决方案1】:

您的 timeFormat 函数永远不会返回,因此调用代码无法继续。

您的主循环具有条件while sec &lt; 60,但每次sec 递增到60,它都会再次重置为零。这意味着循环永远不会结束。

我不清楚您希望它何时结束,因此我不一定会告诉您如何解决该问题,但通常在编写具有多个事件循环的交互式程序时这是一个坏主意,除非您有一个井定义了在它们之间切换的结构。

你有很多循环,当其中一个正在运行时,所有其他的必然会被卡住等待。尝试将一些逻辑从单独的循环移到其他可以从单个主循环调用的函数中。

【讨论】:

  • 您好@Blckknght,谢谢您的回复!我对编程很陌生。该程序是一个秒表,它永远不会关闭,直到用户自己关闭它。我想要做的只是让它在点击开始时启动,在点击停止时停止,同样的重置(称为 lapImage)我在何时何地调用函数和使用循环时遇到问题。我相信我把这一切都搞砸了。
【解决方案2】:

我所要做的就是切换一些 if 语句。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-08
    • 1970-01-01
    • 2018-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多