0

私は QTabWidget を持っており、この QTabWidget タブに表示したいいくつかのウィジェットとサブレイアウトをレイアウトしています。私がやりたいのは、このレイアウトを最初のタブに (デフォルトで) 追加することです。ユーザーが次のタブに移動した場合は、まったく同じレイアウトを表示し、その近くにいくつかのウィジェットを追加したいと考えています。これは私が話しているレイアウトです:

    self.right_tab_layout = QVBoxLayout()
    self.right_tab_widget = QWidget()
    self.right_tab_title_label = QLabel("Select full files path:")
    self.simoderev_layout = QHBoxLayout()
    self.simoderev_widget = QWidget()
    self.simoderev_checkbox = QCheckBox("use simoderev as base: ")
    self.simoderev_combobox = QComboBox()
    self.paths_label = QLabel("paths:")

    self.right_tab_widget.setLayout(self.right_tab_layout)

    self.simoderev_widget.setLayout(self.simoderev_layout)
    self.simoderev_widget.setMaximumWidth(250)

    self.simoderev_layout.addWidget(self.simoderev_checkbox)
    self.simoderev_layout.addWidget(self.simoderev_combobox)
    self.simoderev_layout.setContentsMargins(0,0,0,0)

    self.right_tab_layout.addWidget(self.right_tab_title_label)
    self.right_tab_layout.addWidget(self.simoderev_widget)
    self.right_tab_layout.addWidget(self.paths_label)

これを行う方法はありますか?

4

1 に答える 1

1

タブ内のウィジェットの外観を同じにしたいだけの場合は、カスタム Widget クラスを作成し、そのクラスのインスタンスを各タブに配置する必要があります。

カスタム ウィジェットは次のようになります。

class CustomWidget(QtGui.QWidget):

    def __init__(self, parent=None):
        super(CustomWidget, self).__init__(parent)
        layout = QtGui.QVBoxLayout(self)
        self.title_label = QtGui.QLabel("Select full files path:")
        self.simoderev_widget = QtGui.QWidget()
        simoderev_layout = QtGui.QHBoxLayout(self.simoderev_widget)
        self.simoderev_checkbox = QtGui.QCheckBox("use simoderev as base: ")
        self.simoderev_combobox = QtGui.QComboBox()
        self.simoderev_widget.setMaximumWidth(250)
        simoderev_layout.addWidget(self.simoderev_checkbox)
        simoderev_layout.addWidget(self.simoderev_combobox)
        simoderev_layout.setContentsMargins(0,0,0,0)
        self.paths_label = QtGui.QLabel("paths:")
        layout.addWidget(self.title_label)
        layout.addWidget(self.simoderev_widget)
        layout.addWidget(self.paths_label)

それらを同じにしたい場合は、ハックな解決策があります。currentChangedtabwidget の信号を、カスタム ウィジェットをあるタブから別のタブに移動するスロットに接続する必要があります。

class MyTabWidget(QtGui.QTabWidget):

    def __init__(self, parent = None):
        super(MyTabWidget, self).__init__(parent)

        self.subwidget = CustomWidget(self)

        self.left_tab_widget = QtGui.QWidget()
        self.leftLayout = QtGui.QVBoxLayout(self.left_tab_widget)
        self.leftLayout.addWidget(self.subwidget)

        self.right_tab_widget = QtGui.QWidget(self)
        self.rightLayout = QtGui.QVBoxLayout(self.right_tab_widget)
        label = QtGui.QLabel("Some additional data", self.right_tab_widget)
        self.rightLayout.addWidget(label)

        self.addTab(self.left_tab_widget, "Left Tab")
        self.addTab(self.right_tab_widget, "Right Tab")

        self.currentChanged.connect(self.onCurrentChanged)

    def onCurrentChanged(self, index):
        if index == 0:
            self.leftLayout.addWidget(self.subwidget)
        else:
            self.rightLayout.addWidget(self.subwidget)


if __name__ == "__main__":
    import sys
    app = QtGui.QApplication(sys.argv)
    widget = MyTabWidget()
    widget.show()
    app.exec_()
于 2013-10-15T12:39:38.610 に答える