我对PySide有点陌生。我有一个主窗口对象,每次显示一个小部件。我一直试图更改QMainWindow
类的中心小部件,以便在按下按钮时替换窗口中的可见小部件。问题是按下的按钮在Widget类中,而不是在主窗口类中。
说。。。
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()
按下的按钮位于login_screen
实例中。单击按钮时调用的方法位于LoginScreen
类中:
def login(self):
""" Send login data to the server in order to log in """
#Process
self.setParent(None)
将父小部件设置为None
将从主窗口中删除小部件(login_screen
)。当按下loginButton
(在login_screen
小部件内部)时,我应该怎么做才能获得另一个小部件(例如logged_in_screen
)作为主窗口的中心小部件?
也许登录方法应该在主窗口类中?如果是,我如何将在login_screen
中按下的按钮与主窗口的方法连接起来?
可以使用QMainWindow.setCentralWidget(重复)执行此操作:
您可以使用^{} 作为中心小部件,并将登录屏幕和“登录”屏幕都添加到其中。
示例用法:
如果您不想使用这个小部件,那么我认为您每次更改中心小部件时都必须调用
QMainWindow.setCentralWidget
。至于
login
方法应该在哪里,这取决于。可能您可以为主窗口定义一个简单的接口来添加/删除/显示特定的中心小部件,并从LoginScreen
的login
方法调用它。这样,LoginScreen
类就不必知道实现的细节,比如中心小部件实际上是一个QStackedWidget
还是以另一种方式完成的。相关问题 更多 >
编程相关推荐