我是 Python 和 Qt 的新手,遇到以下问题:我重写了 的事件处理程序class mywin(QMainWindow):
,因此当我单击它时,应该执行一个命令。但是,当命令返回错误时,我想使用QErrorMessage
. 但是,当我单击错误消息的确定按钮时,会注册另一个单击事件,并且该命令会重新执行,出错并显示新的错误消息,因此我永远无法退出错误消息(每次关闭时,另一个重新打开)。
def eventFilter(self, source, event):
if event.type() == QEvent.MouseButtonPress:
if isinstance(source, QWidget):
pos=event.pos()
cursor=self.txtEditor.cursorForPosition(pos)
cursor.select(QTextCursor.WordUnderCursor)
txtClicked=cursor.selectedText()
self.testCommand(str(txtClicked))
return QMainWindow.eventFilter(self, source, event)
def testCommand(self, textClicked=None):
#Command executing and error finding
if error:
errorMessage=QErrorMessage(self)
errorMessage.showMessage(a)
编辑:
这是eventFilter的注册
if __name__ == '__main__':
app = QApplication(sys.argv)
print "OS Name:"+os.name
main = mywin()
main.show()
app.installEventFilter(main)
sys.exit(app.exec_())
如果我登录
- 单击文本区域的源,我得到:
<PyQT4.QtGui.QWidget object at 0x000000000028B30D0>
- self.textEdit,我明白了
<PyQT4.QtGui.QTextEdit object at 0x000000000028B3268>
installEventFilter 文档:http: //harmattan-dev.nokia.com/docs/platform-api-reference/xml/daily-docs/libqt4/qobject.html#installEventFilter