9

チェックボックスがオンになっているかどうかに応じて、2つのレイアウトのいずれかを表示しようとしています。

ウィジェットを使用する場合にのみ、正常に機能する次のことを実行できます:(この例の各ウィジェットはQLineEditです)

myCheckbox.stateChanged.connect(switchControls)

def switchControls (self, state):
    if state == 2:
        self.widget1.show()
        self.widget2.hide()
    else:
        self.widget1.hide()
        self.widget2.show()

ただし、各QLineEditに説明ラベルを追加したいので、ある種のレイアウトまたはコンテナーでQLineEdit+QLabelを組み合わせる必要があります。addlayout / removeLayout / removeItemを試して、ウィジェットの代わりにレイアウトで上記を実行しようとしましたが、機能させることができません。私の最後の試みでプログラムがクラッシュしました。

2つのレイアウトを切り替える最も簡単な方法は何ですか?チェックボックスを使用する必要はありませんが、私はそれを好みます。

4

1 に答える 1

11

レイアウトを別々のウィジェットに入れます。これで、「ウィジェットのみを使用」しています。

次に例を示します。

from PySide.QtCore import *
from PySide.QtGui import *

class MainWindow(QWidget):
    def __init__(self):
        QWidget.__init__(self)

        self.layout=QVBoxLayout()
        self.setLayout(self.layout)


        self.checkbox=QCheckBox("Layouts")
        self.layout.addWidget(self.checkbox)


        self.widget1=QWidget()
        self.layout.addWidget(self.widget1)

        self.layout1=QVBoxLayout()
        self.widget1.setLayout(self.layout1)

        self.layout1.addWidget(QLabel("First layout"))

        self.layout1.addWidget(QTextEdit())


        self.widget2=QWidget()
        self.layout.addWidget(self.widget2)

        self.layout2=QHBoxLayout()
        self.widget2.setLayout(self.layout2)

        self.layout2.addWidget(QTextEdit("Second layout"))

        self.layout2.addWidget(QTextEdit())


        self.checkbox.toggled.connect(self.checkbox_toggled)
        self.checkbox.toggle()

        self.show()

    def checkbox_toggled(self, state):
        self.widget1.setVisible(state)
        self.widget2.setVisible(not state)

app=QApplication([])
mw=MainWindow()
app.exec_()

それを実行して、どのように機能するかを確認してください。

于 2012-08-06T10:34:45.183 に答える