2017-12-11 13 views
0

함수를 GUI 버튼에 연결하는 이와 같은 일부 코드로 시작했습니다.버튼을 누르고있는 동안 함수 호출 반복하기 PyQt5

def on_click(): 
     call_other_funct() 
     time.sleep(1) 
    button = QPushButton('Do the thing', self) 
    button.pressed.connect(on_click) 

문제는 내가 반복 버튼을 아래로 개최되는 마우스의 기간 동안 매 초마다 on_click()를 호출 할 필요가있다. 저는 꽤 많이 검색했지만 PyQt를 사용하여 해결책을 찾지 못했습니다.

나는이 타이머 간격

def on_release(): 
     self.timer.stop() 

    def on_click(): 
     self.timer.start(1000) 
     self.timer.timeout.connect(on_click()) 
     print('click') 
    button.pressed.connect(on_click) 
    button.released.connect(on_release) 

작품의 이런 종류를 사용하여 해결하기 위해 노력하지만, 어떤 이유로 수 일어나고 on_click() 호출 한 지수 것 같지했습니다. (첫 번째 호출에서 "클릭"은 한 번, 두 번, 네 번, 그 다음에 8 번). 각 호출이 한 번만 다시 호출되도록이 작업을 올바르게 수행 할 수있는 방법이 있습니까?

아니면이 모든 것을 함께 수행하는 더 좋은 방법이 있습니까?

답변

2

"지수 증가"는 이벤트 처리기 on_click에서 타이머와 이벤트 처리기 자체 사이의 연결을 생성한다는 사실에서 기인한다고 생각합니다. 그래서 이런 일이 일어날 기대 :

  • on_click 한 번 실행되고 타이머는 초 후에 on_click
  • 에 한 번에 연결되어, 타이머가 다 떨어지기와 on_click을 트리거합니다. on_click 실행 중에 타이머는 다시 on_click에 연결됩니다.
  • 초 후에 타이머가 만료되고 on_click이 두 번 (두 개의 연결로 인해) 트리거됩니다. 그러면 차례로 2 개의 연결이 더 생성됩니다.
  • 당신이 할 일은 마우스 버튼이 눌러져있는 동안 실제로 당신이 매 초마다 실행하고자하는 일을 다른 기능에 타이머를 연결하는 것입니다

.

def on_release(): 
    self.timer.stop() 

def on_press(): 
    self.timer.start(1000) 

def every_second_while_pressed(): 
    print('click') 

button.pressed.connect(on_press) 
button.released.connect(on_release) 
self.timer.timeout.connect(every_second_while_pressed) 
관련 문제