如何在PyQt中切换窗口布局?(无需关闭/打开窗口)
我目前正在尝试用Python和PyQt4(不是Qt Designer)创建一个程序。我创建了一个登录类(QDialog)和一个主页类(QMainWindow)。但是,因为我的程序会有很多页面(程序的导航会很复杂),所以我想知道如何在QMainWindow中切换布局,而不是不断创建新窗口和关闭旧窗口。比如说,我希望在登录后,主页的布局设置为默认屏幕,然后在MainWindow中有一个子类,这样我就可以导航到用户设置(或者其他页面)。我想知道有没有办法把MainWindow的布局切换到用户设置的布局,而不是创建一个新窗口并关闭MainWindow?(如果这听起来不太明白,我很抱歉,我对PyQt还很陌生)。下面是一个示例代码(非常基础的代码)
----------------------------------------------------------------------------------
import sys
from PyQt4.QtGui import *
from PyQt4.QtCore import *
class MainWindow(QMainWindow):
#Constructor
def __init__(self):
super(MainWindow, self).__init__() #call super class constructor
button1 = QPushButton("User Settings", self)
button1.clicked.connect(UserSelection)
button1.resize(50,50)
button1.move(350,50)
self.show()
class UserSelection(?):
...
def main():
app = QApplication(sys.argv) #Create new application
Main = MainWindow()
sys.exit(app.exec_()) #Monitor application for events
if __name__ == "__main__":
main()
1 个回答
15
这段代码是一个示例,展示了如何在编程中使用某些功能。它可能包含一些变量、函数或者其他编程元素,帮助我们理解代码是如何工作的。
在这个代码块中,可能会有一些常见的编程概念,比如循环、条件判断或者数据处理。通过这些示例,初学者可以更好地理解编程的基本逻辑和结构。
总之,这段代码的目的是为了让大家看到实际的编程方式,并帮助新手们更快地上手。
from PyQt4 import QtCore, QtGui
class MainWindow(QtGui.QMainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.central_widget = QtGui.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)
class LoginWidget(QtGui.QWidget):
def __init__(self, parent=None):
super(LoginWidget, self).__init__(parent)
layout = QtGui.QHBoxLayout()
self.button = QtGui.QPushButton('Login')
layout.addWidget(self.button)
self.setLayout(layout)
# you might want to do self.button.click.connect(self.parent().login) here
class LoggedWidget(QtGui.QWidget):
def __init__(self, parent=None):
super(LoggedWidget, self).__init__(parent)
layout = QtGui.QHBoxLayout()
self.label = QtGui.QLabel('logged in!')
layout.addWidget(self.label)
self.setLayout(layout)
if __name__ == '__main__':
app = QtGui.QApplication([])
window = MainWindow()
window.show()
app.exec_()