Pyside - 按下按钮时更改整个GUI

时间:2013-09-30 21:50:55

标签: user-interface python-2.7 pyside qlineedit

我是pyside的新手,我的小程序(以及一般的pyside布局)有问题。

我所拥有的是具有一些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()

假设我在label1旁边的行中输入10,在另一行中输入2,然后按Next。现在我想要清除所有内容并创建2个新列,每个列中包含10个qlines(或类似的内容)。

打扰一下,如果我要么模糊,要么我只是重复自己。我很累,很烦,英语不是我的第一语言。

我会非常感谢我能得到的任何帮助或推动正确的方向。

编辑:如果用其他一些带有标签的小部件类型或其他方法来完成此操作会更容易。我想要做的就是在收到用户的输入后生成新的小部件。

1 个答案:

答案 0 :(得分:1)

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

  1. 创建QWidget
  2. 创建您的布局。
  3. 使用您的布局作为参数调用窗口小部件上的setLayout()
  4. 将新窗口小部件推送到QStackedLayout
  5. 使用QStackedLayout的{​​{1}}或setCurrentIndex()函数设置当前版面。
  6. 我在我的一个项目中做了类似的事情。有关更完整的示例,请参阅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