python - 来自 MouseReleaseEvent 的信号

标签 python python-2.7 pyqt pyqt4

我不确定我做错了什么,基本上我想在 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/

相关文章:

python - QFrame 背景色与 QLineEdit、QListBoxWidget 等其他 Widget 重叠。如何避免?

python - struct.pack 在 ruby​​ 中等效吗?

python - 如何从电子邮件中获取 csv 附件并保存

python - 即使在发生错误后继续 python 脚本

python - 如何在 Fabric 2 中使用 Connection?

python - 如何在 QListWidgetItem 周围绘制边框

python - 使用外部 python 脚本打开 maya 并在 maya 中运行另一个脚本

python - 为什么它显示不同的输出?

python - Tkinter:如何设置 ttk.Radiobutton 激活并获取它的值?

python - 为类动态添加装饰器