我有一个有数百个自定义按钮的应用程序,每个按钮都需要多个信号连接。连接调用似乎非常慢,所以我尝试使用enter和leave事件通过主窗口的eventFilter连接/断开每个按钮的信号。
但是,有时这些事件似乎被多次调用,导致RuntimeErrors (当试图断开一个已经消失的事件时)。下面是使用默认PushButtons显示类似(希望是相关的)问题的代码片段。要在这里查看运行时错误,请运行代码,按其中一个按钮,然后关闭窗口。就在那时我看到了这个
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_() )发布于 2013-05-14 08:04:13
在少数情况下,当我测试鼠标事件时,当事件附加到item类时,显示了更好的性能.所以不要子类。相反:
class Button(QPushButton):
def __init__(self, label):
super(Button, self).__init__()
self.setText(label)
app = QApplication( sys.argv )
w = TestWindow()
for i in xrange(10):
btn = Button( 'test %s' % i )
w.addWidget( btn )...then为类定义鼠标事件。
https://stackoverflow.com/questions/11076226
复制相似问题