1

我对 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(或类似的东西)。

对不起,如果我含糊不清,或者我只是在重复自己。我又累又烦,英语不是我的第一语言。

我将非常感谢我能得到的任何帮助或朝着正确的方向前进。

编辑:如果使用其他带有标签的小部件或其他东西更容易做到这一点。我想做的就是在收到用户的输入后生成新的小部件。

4

1 回答 1

1

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

  1. 创建一个QWidget.
  2. 创建您的布局。
  3. setLayout()以您的布局作为参数调用小部件。
  4. 将新小部件推送到QStackedLayout.
  5. 使用QStackedLayout'ssetCurrentIndex()setCurrentWidget()函数来设置当前布局。

我在我的一个项目中做了类似的事情。有关更完整的示例,请参阅https://github.com/shanet/Cryptully/blob/master/cryptully/qt/qChatTab.py 。另请参阅Pyside 更改布局以了解类似问题。

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

于 2013-09-30T21:55:52.160 回答