2016-12-10 6 views
0

난 후 내 프로그램 동결 생각 : 마우스 포인트가 타이머가 정지됩니다 stopImage에있을 때다른 기능을 호출 한 후 기능을 계속 유지하는 방법은 무엇입니까?

if pressed(win.getMouse(), startImage): 
    task = 'start' 
    timeFormat() 

기본적으로, 난 할 노력하고있어 것은, 마우스 클릭이 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

asyncio가 있습니까? [18.5.3. Tasks and Coroutines - Python 3.5.2 documentation] (https://docs.python.org/3/library/asyncio-task.html) – paragbaxi

+0

안녕하세요. 불행히도이 새로운 기능을 배울 시간이 없습니다. 내 일을 할 수있는 방법이 있습니다. 나는 무언가를 잘못하고 있습니다. – Sammy

답변

0

귀하의 timeFormat 기능은 반환하지 않는다, 그래서 호출 코드를 계속할 수 없습니다.

메인 루프의 조건은 while sec < 60이지만, sec60으로 증가 할 때마다 다시 0으로 재설정됩니다. 이것은 루프가 끝나지 않을 것임을 의미합니다.

내가 끝내기를 기대하는 것이 분명하지 않기 때문에 문제를 해결하는 방법을 알려줄 수는 없지만 일반적으로 대화식 프로그램을 작성하여 여러 개의 이벤트 루프를 만들 때 그들 사이를 전환하기위한 잘 정의 된 구조.

루프가 많으며 둘 중 하나가 실행 중이면 다른 모든 루프가 반드시 대기 상태가됩니다. 하나의 메인 루프에서 호출 할 수있는 다른 기능으로 별도의 루프에서 일부 로직을 이동해보십시오.

+0

안녕하세요. @Blckknght, 답장을 보내 주셔서 감사합니다! 나는 프로그래밍에 익숙하지 않으므로 나를 맨손으로. 이 프로그램은 스톱워치이며, 사용자가 막 그를 닫을 때까지 닫히지 않습니다. 내가 뭘 하려는지 시작하는 것입니다 클릭 시작, 멈춤을 클릭하면 멈추고 리셋 (lapImage라고도 함)에 대한 때 나는 언제 어디서 함수를 호출하고 루프를 사용하여 문제가 있습니다. 나는 그것을 모두 뒤죽박죽이라고 믿는다. – Sammy

0

if 문을 if 문으로 전환해야했습니다.

관련 문제