조건에 따라 버튼을 다른 기능에 연결/다시 연결하고 싶습니다.PyQt 위젯 connect() 및 disconnect()
의 내가 버튼을 있다고 가정 해 봅시다 :이 예를 들어
myButton = QtGui.QPushButton()
는 이제 인터넷 연결이 있다면 확인 가정 해 봅시다.
if connected == True:
myButton.clicked.connect(function_A)
elif connected == False:
myButton.clicked.connect(function_B)
I 버튼 재 할당되기 전에/재접속 다른 함수 (function_A 또는 function_B)에 이미 접속 된 모든 기능에서 버튼을 해제하고자 우선. 둘째, 버튼을 다시 연결 한 후에 버튼을 클릭하면 새 기능을 사용할 수 있다는 사실을 이미 알아 챘습니다. 버튼을 다른 기능에 다시 연결하면 이전 기능 (이전에 재 연결하기 전에 버튼이 연결되었던 기능)을 계속 실행하려고 시도합니다. 제발 조언. 미리 감사드립니다!
는 나중에 편집 :
IT는 위젯의 .disconnect() 메소드 함수가 연결되어 그로부터 버튼을 분리하는데 사용될 수있다 나타난다. 위젯은 임의의 함수에 연결되지 않은 경우
myButton.disconnect()
불행히도 .disconnect()는 에러가 발생. Try/Except를 사용하고 있습니다. 그러나 나는 오히려 더 우아한 솔루션을 사용하는 것입니다 ...
try: myButton.clicked.disconnect()
except Exception: pass
예외는 무엇입니까? 조금 이상하다. 아니, myButton.disconnect()는 myButton.clicked.disconnect()와 다르다. 실제로 어떤 것을 언급하고 있는가? – Schollii
@ Schollii. 'TypeError'를 발생시킵니다. 그리고 예외는 이상한 것이 아닙니다. 사실, 매우 바람직합니다. 이것이 도입 된 이유는 시그널을 연결하고 연결 해제하는 예전 스타일의 방법이 자동으로 실패하기 때문에 잠재적 인 버그를 많이 숨길 수 있기 때문입니다. 간단히 말해서, 훨씬 더 파이썬으로 예외를 발생시킵니다. – ekhumoro
설명해 주셔서 감사합니다. 나는 왜 모든 시그널을 disconnect()하는 함수가 예외적 인 행동으로 "현재 연결이 없다"고 처리해야하는지 알지 못한다. OTOH disconnect (someSignal)를 시도했는데 그 시그널이 존재하지 않는다면, 예외 상태로 표시해야한다는 것을 알 수 있습니다. 그러나 anyhoo, 그것은 여기도 거기에 없다, 정보에게 감사드립니다. – Schollii