Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用PyQt切换窗口中的布局??(不关闭/打开车窗)_Python_Qt_Pyqt4 - Fatal编程技术网

Python 如何使用PyQt切换窗口中的布局??(不关闭/打开车窗)

Python 如何使用PyQt切换窗口中的布局??(不关闭/打开车窗),python,qt,pyqt4,Python,Qt,Pyqt4,我目前正在尝试使用python和PyQt4(不是Qt设计器)创建一个程序。 我创建了一个登录类(QDialog)和一个主页类(QMainWindow)。然而,由于我的程序将包含大量页面(程序中的导航将很大),我想知道如何在QMainWindow中切换布局,而不是不断创建新窗口和关闭旧窗口。例如,登录后,我会将主窗口(“主页”)布局设置为默认屏幕,然后在主窗口中有一个子类,允许我导航到用户设置(或任何其他页面)。除了创建一个新窗口并关闭主窗口外,我是否有办法将主窗口布局切换为用户设置布局??(抱歉

我目前正在尝试使用python和PyQt4(不是Qt设计器)创建一个程序。 我创建了一个登录类(QDialog)和一个主页类(QMainWindow)。然而,由于我的程序将包含大量页面(程序中的导航将很大),我想知道如何在QMainWindow中切换布局,而不是不断创建新窗口和关闭旧窗口。例如,登录后,我会将主窗口(“主页”)布局设置为默认屏幕,然后在主窗口中有一个子类,允许我导航到用户设置(或任何其他页面)。除了创建一个新窗口并关闭主窗口外,我是否有办法将主窗口布局切换为用户设置布局??(抱歉,如果这没有意义,我是PyQt的新手)。 示例代码如下所示(V.Basic代码)

----------------------------------------------------------------------------------
您可以通过替换QMainWindow的centralWidget来实现这一点。几分钟后我会想出一个例子。
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()
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_()