2014-03-27 126 views
1

我目前正在嘗試使用python和PyQt4(而不是Qt Designer)創建一個程序。 我創建了一個登錄類(QDialog)和一個主類(QMainWindow)。然而,因爲我的程序將包含大量頁面(通過程序的導航會很大),我想知道如何在QMainWindow中切換佈局,而不是不斷創建新窗口並關閉舊窗口。例如,我會將MainWindow('HomePage')佈局設置爲默認屏幕,然後在MainWindow中有一個允許我導航到用戶設置(或任何其他頁面)的子類。而不是創建一個新窗口並關閉MainWindow,有沒有辦法讓我將MainWindow佈局交換到用戶設置佈局? (道歉,如果這沒有意義,即時通訊新的PyQt)。 示例代碼如下所示(V.Basic代碼)如何使用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() 
+0

你可以做到這一點通過更換你的QMainWindow的centralWidget。我會在幾分鐘內掀起一個例子。 – ivica

回答

7
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_() 
+0

謝謝,真的有幫助! –