I'm kinda new to PySide.I have a main window object which shows one widget at a time. I've been trying to change the central widget of the QMainWindow
class in order to replace the visible Widget in the window when pressing a button. The problem is that the button pressed is in the Widget class, not in the main window class.
say...
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()
The pressed button is in the login_screen
instance. The method called when the button is clicked is inside the LoginScreen
class:
def login(self):
""" Send login data to the server in order to log in """
#Process
self.setParent(None)
Setting the parent widget to None
removes the widget (login_screen
) from the main window. What should I do in order to get another widget (e.g. logged_in_screen
) as the central widget of the main window when the loginButton
(inside the login_screen
widget) is pressed?
Maybe the login method should be inside the main window class? If so, how can I connect the buttons pressed in login_screen
with the main window's method?
You can use QMainWindow.setCentralWidget to do this (repeatedly):
You may use a
QStackedWidget
as central widget and add both the log-in screen and "logged-in" screen to it.An example usage:
If you do not want to use this widget, then I think you'll have to call
QMainWindow.setCentralWidget
every time you change the central widget.As to where the
login
method should be, it depends. Probably you could define a simple interface for your mainwindow to add/remove/show specific central widgets, and call it from thelogin
method ofLoginScreen
. In this way theLoginScreen
class does not have to know about implementation details such as if the central widget is actually aQStackedWidget
or this thing is done in an other way.