我不确定自己在做什么错,基本上我想在mouserelease事件发生时发出一个信号(自定义)。

Class myWidget(QWidget):

  def mouseReleaseEvent(self,event):
    if event.button()==Qt.LeftButton:
        message="LEFT BUTTON HAS BEEN CLICKED"
        QtCore.QObject.emit(self,QtCore.SIGNAL('message(QString)') str(message))


当我这样做时,什么也没发生,我看不到发出的信号,所以我决定移动

    message="LEFT BUTTON HAS BEEN CLICKED"
    QtCore.QObject.emit(self,QtCore.SIGNAL('message(QString)') str(message))


进入PaintEvent,这样我就可以确定是否触发了任何操作。在paintevent中令我惊讶的是,我可以看到该事件被触发了(因为​​我能够使用该消息)。但是,当我将其放入mouseReleaseEvent甚至MousePressEvent中时,什么都没有发生?

我究竟做错了什么。
注意,我确实尝试将打印“ hello world”行直接放入mouseReleaseEvent中,只是为了进行测试,并且我可以看到打印语句正在按预期执行。为什么我没有看到MouseReleaseEvent?

使用pyqt,python和Windows。这很奇怪

最佳答案

不要使用老式的信号语法,因为它很容易弄错并且很难调试。使用new style syntax代替:

from PyQt4 import QtCore, QtGui

class MyWidget(QtGui.QWidget):
    testSignal = QtCore.pyqtSignal(object)

    def __init__(self, parent=None)
        super(MyWidget, self).__init__(parent)
        self.testSignal.connect(self.testSlot)

    def testSlot(self, message):
        print(message)

    def mouseReleaseEvent(self, event):
        self.testSignal.emit('mouse release')
        super(MyWidget, self).mouseReleaseEvent(event)

关于python - 从MouseReleaseEvent发出信号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34731702/

10-11 07:47