나는 수많은 사용자 정의 버튼이있는 응용 프로그램을 가지고 있습니다. 각 응용 프로그램에는 다중 신호 연결이 필요합니다. 연결 호출은 꽤 느린 것 같습니다. 그래서 입력/종료 이벤트를 사용하여 메인 윈도우의 eventFilter
을 통해 각 버튼의 신호를 연결/연결 해제하려고합니다.eventFilter를 통한 신호 연결/연결 해제
그러나 때때로 이러한 이벤트가 여러 번 호출되어 RuntimeErrors (이미 사라진 이벤트의 연결을 끊으려고 할 때)가 발생하는 것 같습니다. 다음은 기본 푸시 버튼을 사용하여 유사하고 관련있는 문제를 보여주는 코드 스 니펫입니다. 여기에서 런타임 오류를 보려면 코드를 실행하고 단추 중 하나를 누른 다음 창을 닫습니다. 그것이 내가 이것을 볼 때입니다 :
RuntimeError: Fail to disconnect signal clicked().
다음은 코드입니다. 아무도 이것이 PySide 버그인지 알 수 있습니까? 내가 마우스 이벤트를 테스트 할 때 이벤트가 너무 서브 클래스하지 ... 항목 클래스에 장착하는 동안 몇 가지 경우
from PySide.QtGui import *
from PySide.QtCore import *
import sys
class TestWindow(QWidget):
def __init__(self, parent=None):
super(TestWindow, self).__init__(parent)
self.setLayout(QGridLayout())
def addWidget(self, w):
self.layout().addWidget(w)
def testCB(self):
print 'button connected'
def eventFilter(self, obj, event):
'''Connect signals on mouse over'''
if event.type() == QEvent.Enter:
print 'enter',
obj.clicked.connect(self.testCB)
elif event.type() == QEvent.Leave:
print 'leave'
obj.clicked.disconnect(self.testCB)
return False
app = QApplication(sys.argv)
w = TestWindow()
for i in xrange(10):
btn = QPushButton('test %s' % i)
w.addWidget(btn)
btn.installEventFilter(w)
w.show()
sys.exit(app.exec_())