Ersetzen CentralWidget im Hauptfenster
Ich bin irgendwie neu auf PySide.Ich habe ein Hauptfenster-Objekt, das zeigt eine widget in einer Zeit. Ich hab schon versucht das zu ändern, das zentrale widget der QMainWindow
Klasse, um die zu ersetzen, die sichtbare Widget in das Fenster beim drücken einer Taste. Das problem ist, dass die Taste, die gedrückt wird, in der Widget-Klasse, nicht in der Hauptfenster-Klasse.
sagen...
class App(QtGui.QMainWindow):
def __init__(self):
super(App, self).__init__()
self.initUI()
def initUI(self):
self.statusBar().showMessage('Listo.') #Status Bar
self.login_screen = LoginScreen()
self.logged_in_screen = LoggedInScreen()
self.setCentralWidget(self.login_screen)
self.setGeometry(300, 300, 450, 600) #Window Size
self.setWindowTitle('PyTransactio - Client') #Window Title
self.setWindowIcon(QtGui.QIcon('icon.png')) #App Icon
self.show()
Die der gedrückten Taste wird in der login_screen
Instanz. Die Methode wird aufgerufen, wenn die Schaltfläche geklickt wird, ist im inneren des LoginScreen
Klasse:
def login(self):
""" Send login data to the server in order to log in """
#Process
self.setParent(None)
Einstellung der Eltern-widget zu None
entfernt das widget (login_screen
) aus dem Hauptfenster. Was sollte ich tun, um zu bekommen ein weiteres widget (z.B. logged_in_screen
) als zentrale widget der wichtigsten Fenster bei der loginButton
(innerhalb der login_screen
widget) gedrückt wird?
Vielleicht die login-Methode sollte im Hauptfenster-Klasse? Wenn ja, wie Verbinde ich die Tasten gedrückt login_screen
mit der Haupt-Fenster-Methode?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie einen
QStackedWidget
als zentrale widget und fügen Sie sowohl die log-in screen und "logged-in" - Bildschirm, um es.Beispiel:
Wenn Sie nicht möchten, verwenden Sie dieses widget, dann denke ich werden Sie anrufen
QMainWindow.setCentralWidget
jedes mal, wenn Sie ändern das zentrale widget.Den
login
Methode sollte sein, es hängt davon ab. Wahrscheinlich könnten Sie eine einfache Schnittstelle für Ihre mainwindow hinzufügen/entfernen/anzeigen von bestimmten zentralen widgets, und rufen Sie es von derlogin
Methode derLoginScreen
. Auf diese Weise wird dieLoginScreen
Klasse muss nicht wissen über Implementierungsdetails, wie wenn das zentrale widget ist eigentlich eineQStackedWidget
oder diese Sache ist in einer anderen Art und Weise.self.parent().login
. Denke, ich werde auf meinem OOP. Ich danke Ihnen sehr!QStackedWidget
und nicht die Kerbe, die wahrscheinlich erfordert einige hässlichen code, um richtig zu arbeiten.Können Sie QMainWindow.setCentralWidget, dies zu tun (wiederholt):