1

私は pyside がまったく初めてで、小さなプログラム (および pyside レイアウト全般) に問題があります。

私が持っているのは、いくつかの QlineEdits、コンボボックス、およびボタンを備えた UI です。Qlinesに入力してボタンを押した後、まったく新しいレイアウトで新しいウィンドウを開くか、できれば開いているウィンドウをクリアして、qlinesからの入力に基づいて新しいレイアウトで埋めたいと思います。おそらくこれは非常に基本的なことですが、動作させることができません。その理由は、GUI が既に設定されて表示されている場合に、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 を入力して、[次へ] を押します。すべてをクリアして、それぞれに 10 個の qlines (またはそのようなもの) を持つ 2 つの新しい列を作成したいとします。

漠然としている場合、または単に繰り返している場合は、すみません。私は疲れていていらいらしていて、英語は私の母国語ではありません.

私が得ることができる助け、または正しい方向へのプッシュに深く感謝します.

編集:タブ付きの他のウィジェットタイプなどでこれを実現する方が簡単な場合は問題ありません。私がしたいのは、ユーザーからの入力を受け取った後に新しいウィジェットを生成することだけです。

4

1 に答える 1

1

あなたがやりたいことは、QStackedLayout[1]を使用することです。

  1. を作成しますQWidget
  2. レイアウトを作成します。
  3. setLayout()レイアウトを引数としてウィジェットを呼び出します。
  4. 新しいウィジェットを にプッシュしますQStackedLayout
  5. または関数を使用して、現在QStackedLayoutのレイアウトを設定します。setCurrentIndex()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

于 2013-09-30T21:55:52.160 に答える