【问题标题】:Signaling from a MouseReleaseEvent来自 MouseReleaseEvent 的信号
【发布时间】:2016-01-11 21:44:57
【问题描述】:

我不确定我做错了什么,基本上我想在 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。这很奇怪

【问题讨论】:

    标签: python python-2.7 pyqt pyqt4


    【解决方案1】:

    不要使用旧式的信号语法,因为它很容易出错并且很难调试。请改用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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-17
      • 1970-01-01
      • 2011-07-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多