Как получить доступ к QstatusBar в QMainWindows из класса виджетов?
Я пытаюсь изменить текст Qstatusbar, созданного в классе mainwindows, из другого класса
Я попробовал несколько вещей для Интернета, но не нашел ответа...
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_())
Я хотел бы иметь возможность изменять текст строки состояния, созданный в классе MainWindow из класса Widget
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") # <---