2016-01-11 2 views
0

Я не уверен, что я делаю неправильно, в основном я хочу испускать сигнал (обычай) всякий раз, когда происходит событие mouserelease.Сигнализация с MouseReleaseEvent

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. Это очень нечетно

ответ

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)