如何获取PyQt5中其他小部件的mousePressEvent的返回值

时间:2018-11-14 05:24:56

标签: python pyqt pyqt5

如何获取小部件的 mousePressEvent 返回的值并将其应用于另一个小部件?

这是带有mousePressEvent的小部件:

class Text(QTextEdit):
    ...

    def mousePressEvent(self, event):
        if event.button()==Qt.LeftButton:        
            return "test"

现在,我想使用从事件返回的字符串并将其应用于另一个小部件:

class OtherWidget(QWidget):
    ...
    self.label=QLabel()
    self.label.setText(???) # <=== How to put the string here?
    ...

我该怎么做?我已经尝试了以下方法,但是不起作用。

    self.label.setText(Text().mousePressEvent())

1 个答案:

答案 0 :(得分:2)

事件不会返回任何内容,因为您指出的是不可能的,Qt使用信号异步发送信息,在下一部分中,我将显示一个示例:

from PyQt5 import QtCore, QtWidgets

class Text(QtWidgets.QTextEdit):
    mousePressSignal = QtCore.pyqtSignal(str)

    def mousePressEvent(self, event):
        if event.button() == QtCore.Qt.LeftButton:
            text = "test: {}-{}".format(event.pos().x(), event.pos().y())
            self.mousePressSignal.emit(text)

class OtherWidget(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super(OtherWidget, self).__init__(parent)
        self.label = QtWidgets.QLabel()
        lay = QtWidgets.QVBoxLayout(self)
        lay.addWidget(self.label, alignment=QtCore.Qt.AlignCenter)

    @QtCore.pyqtSlot(str)
    def setText(self, text):
        self.label.setText(text)

if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    t = Text()
    o = OtherWidget()
    o.resize(640, 480)
    t.mousePressSignal.connect(o.setText)
    t.show()
    o.show()
    sys.exit(app.exec_())