Как получить возвращаемое значение mousePressEvent другого виджета в PyQt5 - PullRequest
0 голосов
/ 14 ноября 2018

Как получить значение, возвращаемое из 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 голосов
/ 14 ноября 2018

События ничего не возвращают, поскольку то, на что вы указываете, невозможно, 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_())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...