2

我正在尝试从另一个类更改在 mainwindows 类中创建的 Qstatusbar 的文本

我已经为网络尝试了几件事,但没有找到答案......

class MainWindow(QMainWindow):

    def __init__(self, widget):
        QMainWindow.__init__(self)
        self.setWindowTitle("Main Windows")

        # Status Bar
        self.main_statusbar = QStatusBar()
        self.main_statusbar.showMessage("Ready")
        self.setStatusBar(self.main_statusbar)

class Widget(QWidget):

    def __init__(self):
        QWidget.__init__(self)
        self.buttons_layout = QHBoxLayout()
        self.btn_enregister = QPushButton("Save")
        self.btn_enregister.clicked.connect(self.save_information)

    def save_information(self):

        if self.line_prenom.text() and self.line_nom.text():
            info_client.write(db)
        else:
            (this line)---> main_statusbar.showMessage("Fidouda")

if __name__ == "__main__":
    app = QApplication(sys.argv)
    widget = Widget()
    window = MainWindow(widget)
    window.resize(800, 700)
    window.show()
    sys.exit(app.exec_())

我希望能够从 Widget 类修改 MainWindow 类中创建的状态栏文本

4

1 回答 1

1

Qt 相对于其他库的优势之一是允许您在对象之间进行通知的信号,在这种情况下,它是最佳选择:

from PySide2.QtCore import Signal # <---


class MainWindow(QMainWindow):

    def __init__(self, widget):
        QMainWindow.__init__(self)
        self.setWindowTitle("Main Windows")

        # Status Bar
        self.main_statusbar = QStatusBar()
        self.main_statusbar.showMessage("Ready")
        self.setStatusBar(self.main_statusbar)
        widget.messageChanged.connect(self.main_statusbar.showMessage) # <---

class Widget(QWidget):
    messageChanged = Signal(str) # <---

    # ...

    def save_information(self):

        if self.line_prenom.text() and self.line_nom.text():
            info_client.write(db)
        else:
            self.messageChanged.emit("Fidouda") # <---
于 2019-08-30T18:04:26.497 回答