2013-09-30 29 views
1

我對pyside完全陌生,而且我的小程序(以及一般的pyside佈局)有問題。Pyside - 按下按鈕時更改整個GUI

我所擁有的是一些帶有QlineEdits,組合框和按鈕的UI。填好Qlines並按下按鈕後,我想要打開一個全新佈局的新窗口,或者最好清除打開的窗口,並根據來自qlines的輸入填充新佈局。也許這是超級基礎,但我無法讓它工作。原因在於,我無法掌握如何在已經設置和顯示的時候能夠替換或添加新的東西到我的GUI中。

比方說,我有一個這樣的腳本:

import sys 
import os 



from PySide import QtCore, QtGui 

class BasicGui(QtGui.QWidget): 

    def __init__(self): 
     super(Example, self).__init__() 

     self.initUI() 

    def initUI(self): 


     self.projectNameLbl1 = QtGui.QLabel('Label1') 
     self.projectNameLbl2 = QtGui.QLabel('Label2') 


     self.nextBtn = QtGui.QPushButton("Next") 

     self.projectNameEdit = QtGui.QLineEdit(self) 
     self.projectNameEdit2 = QtGui.QLineEdit(self) 



     grid = QtGui.QGridLayout() 
     grid.setSpacing(10) 




     grid.addWidget(self.projectNameLbl1, 2, 0) 
     grid.addWidget(self.projectNameEdit, 2, 1) 
     grid.addWidget(self.projectNameLbl2, 3, 0) 
     grid.addWidget(self.projectNameEdit2, 3, 1) 

     grid.addWidget(self.nextBtn, 4, 1) 


     self.setLayout(grid) 

     self.setGeometry(300, 300, 350, 300) 
     self.setWindowTitle('projectCreator')  
     self.show() 
     self.nextBtn.clicked.connect(self.nextPressed) 


    def nextPressed(self): 
     self.msgBox = QtGui.QMessageBox() 
     self.msgBox.setText("When this button is pressed I want to generate a new layout") 
     self.msgBox.exec_() 



def main(): 

    app = QtGui.QApplication(sys.argv) 
    ex = BasicGui() 
    sys.exit(app.exec_()) 




if __name__ == '__main__': 
    main() 

說我在其他並按Next.Now我想清楚了一切,創建2個毗鄰label1和2行中輸入10每個新的列都有10個qlines(或類似的東西)。

對不起,如果我要麼模糊或如果我只是重複自己。我厭倦和惱怒,英語不是我的第一語言。

我會深表感謝,我可以得到任何幫助或推動正確的方向。

編輯:如果用其他一些帶有標籤的widgetype或者其他很好的東西來實現這個更容易。我想要做的就是在收到用戶的輸入後生成新的小部件。

回答

1

你想要做的是使用QStackedLayout [1]。

  1. 創建一個QWidget
  2. 創建您的佈局。
  3. 使用佈局作爲參數,在窗口小部件上調用setLayout()
  4. 將新小部件推到QStackedLayout上。
  5. 使用QStackedLayoutsetCurrentIndex()setCurrentWidget()函數來設置當前佈局。

我在一個項目中做了類似的事情。有關更完整的示例,請參見https://github.com/shanet/Cryptully/blob/master/cryptully/qt/qChatTab.py。有關類似問題,另見Pyside Changing Layouts

[1] http://qt-project.org/doc/qt-4.8/qstackedlayout.html