Nawiązując do poprzedniego posta i zgodnie z prośbą lukaszvip166 rozpisuję jak to się dzieje w przykładzie:
class MainWindow(QMainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.central_widget = QStackedWidget()
self.setCentralWidget(self.central_widget)
login_widget = LoginWidget(self)
login_widget.button.clicked.connect(self.login)
self.central_widget.addWidget(login_widget)
def login(self):
logged_in_widget = LoggedWidget(self)
self.central_widget.addWidget(logged_in_widget)
self.central_widget.setCurrentWidget(logged_in_widget)
W klasie MainWindow przy jej tworzeniu ( def __init__(self, parent = None) )
- funkcja super tworzy obiekt klasy MainWindow jako QMainWindow
- self.central_wigdet - ustawia główny(centralny) widget jako QStacketWidget
- środkuje ten widget
- następnie tworzona jest instancja klasy LoginWidget
- ustawia listener "na kliknięcie" -> funckje login(self)
- no i dodaje widget login_widget do widoku patrz pkt 2, 3
Funkcja login(self)
- zmienna logged_in_widget wskazuje na obiekt klasy LoggedWidget
- dodaje widget logged... do (patrz punkt 2, 3 metody __init__)
- ustawia teraz wyświetlany widget na logged...()
class LoginWidget(QWidget):
def __init__(self, parent=None):
super(LoginWidget, self).__init__(parent) # tworzy widget
layout = QHBoxLayout() #ustawia layout
self.button = QPushButton('Login') #definiuje przycisk
layout.addWidget(self.button) #dodaje do layoutu
self.setLayout(layout) #ustawia przycisk
# you might want to do self.button.click.connect(self.parent().login) here
class LoggedWidget(QWidget):
def __init__(self, parent=None):
super(LoggedWidget, self).__init__(parent)# tworzy widget
layout = QHBoxLayout() #ustawia layout
self.label = QLabel('logged in!') #definiuje pole
layout.addWidget(self.label) #dodaje je
self.setLayout(layout) #ustawia layout