更改pyqt中嵌套布局的扩展空间

问题描述 投票:3回答:2

我想将主窗口的小部件分成3种布局,并将它们添加到主布局中中间的布局包含一个tablewidget,并且shoud的宽度要比左边/右边的宽度更大。到目前为止,我还没有找到使用网格布局并单独调整每列宽度的方法。

因此,我尝试使用3个vboxlayouts并将其插入到hboxlayout中

到目前为止阅读的内容是小部件的大小是固定的,因此如果拉伸,它们将以相同的速度扩展。

[例如,在不更改每个小部件的SizePolicy的情况下插入分隔符,是否有更简单的方法来使中心布局更大?

import sys

from PyQt5 import QtWidgets as qtw
from PyQt5 import QtCore as qtc
from PyQt5 import QtGui as qtg


class Stretchme(qtw.QWidget):
    def __init__(self):
        super().__init__()

        # # View
        table_widget = qtw.QTableWidget()


        # -----interface--widgets--------------------------#

        # -------- parameter_widgets------------#
        parameter_label = qtw.QLabel("Parameter")

        test_time_label = qtw.QLabel("Time")
        self.clocktime = qtw.QTimeEdit()
        test_date_label = qtw.QLabel("Date")
        self.date_time = qtw.QDateEdit()

        grob_fein_label = qtw.QLabel("Grobe")
        grob_fein_combo_box = qtw.QComboBox()


        vr_label = qtw.QLabel("Lame")
        self.vr_feuchte_input = qtw.QLineEdit()


        # leftvboxlayout
        left_vboxlayout = qtw.QVBoxLayout()

        left_vboxlayout.addStretch(1)

        left_vboxlayout.addWidget(test_time_label)
        left_vboxlayout.addWidget(self.clocktime)
        left_vboxlayout.addWidget(test_date_label)
        left_vboxlayout.addWidget(self.date_time)
        left_vboxlayout.addWidget(grob_fein_label)
        left_vboxlayout.addWidget(grob_fein_combo_box)
        left_vboxlayout.addWidget(vr_label)
        left_vboxlayout.addWidget(self.vr_feuchte_input)

        # centervboxlayout
        center_voboxlayout = qtw.QVBoxLayout()
        #
        # center_voboxlayout.addStretch()
        # center_voboxlayout.setStretchFactor()
        # center_voboxlayout.addSpacing()
        # center_voboxlayout.setStretchFactor()

        #
        # table_widget.setMinimumSize(90,80)

        center_voboxlayout.addWidget(table_widget)


        # righvobxlayout
        # buttons
        self.button_1 = qtw.QPushButton("Button 1")
        self.button_2 = qtw.QPushButton("Button 2")
        self.button_2 = qtw.QPushButton("Button 3")


        rightvboxlayout = qtw.QVBoxLayout()
        rightvboxlayout.addStretch(1)
        rightvboxlayout.addWidget(self.button_1)
        rightvboxlayout.addWidget(self.button_2)
        rightvboxlayout.addWidget(self.button_2)



        #
        #
        # Separador = qtw.QFrame()
        # # Separador.Shape(QFrame.HLine)
        # Separador.setFrameShape(qtw.QFrame.HLine)
        #
        # Separador.setSizePolicy(qtw.QSizePolicy.Minimum,qtw.QSizePolicy.Expanding)
        # Separador.setLineWidth(5)
        # # HPOUT1_layout = QVBoxLayout()
        # # HPOUT1_layout.addLayout(HPOUT1L_layout)
        # # HPOUT1_layout.addWidget(Separador)
        # # HPOUT1_layout.addLayout(HPOUT1R_layout)


        ## main layout
        self.qhboxlayout = qtw.QHBoxLayout()
        self.qhboxlayout.addLayout(left_vboxlayout)
        # self.qhboxlayout.addWidget(Separador)
        self.qhboxlayout.addLayout(center_voboxlayout)
        self.qhboxlayout.addLayout(rightvboxlayout)
        #
        # ### Main Grid

        # -------------------------------------------------- #
        selected_color = qtg.QColor(0,0,255)

        # self.setGeometry(300, 300, 1850, 950)
        self.setStyleSheet("background-color: {}")
        self.setLayout(self.qhboxlayout)

        self.show()


if __name__ == '__main__':
    app = qtw.QApplication(sys.argv)
    w = Stretchme()
    sys.exit(app.exec_())
python pyqt
2个回答
1
投票

添加中央布局时必须设置拉伸因子:

# ...
self.qhboxlayout.addLayout(center_voboxlayout, stretch=1)
# ...

enter image description here


0
投票

尝试一下:

您将通过以下方式决定为每个布局分配多少空间:

    self.qhboxlayout.addLayout(left_vboxlayout,20)
    self.qhboxlayout.addLayout(center_voboxlayout,80)
    self.qhboxlayout.addLayout(rightvboxlayout,20)

您的代码

import sys

from PyQt5 import QtWidgets as qtw
from PyQt5 import QtCore as qtc
from PyQt5 import QtGui as qtg


class Stretchme(qtw.QWidget):
    def __init__(self):
        super().__init__()

        # # View
        table_widget = qtw.QTableWidget()


        # -----interface--widgets--------------------------#

        # -------- parameter_widgets------------#
        parameter_label = qtw.QLabel("Parameter")

        test_time_label = qtw.QLabel("Time")
        self.clocktime = qtw.QTimeEdit()
        test_date_label = qtw.QLabel("Date")
        self.date_time = qtw.QDateEdit()

        grob_fein_label = qtw.QLabel("Grobe")
        grob_fein_combo_box = qtw.QComboBox()


        vr_label = qtw.QLabel("Lame")
        self.vr_feuchte_input = qtw.QLineEdit()


        # leftvboxlayout
        left_vboxlayout = qtw.QVBoxLayout()

        left_vboxlayout.addStretch(1)

        left_vboxlayout.addWidget(test_time_label)
        left_vboxlayout.addWidget(self.clocktime)
        left_vboxlayout.addWidget(test_date_label)
        left_vboxlayout.addWidget(self.date_time)
        left_vboxlayout.addWidget(grob_fein_label)
        left_vboxlayout.addWidget(grob_fein_combo_box)
        left_vboxlayout.addWidget(vr_label)
        left_vboxlayout.addWidget(self.vr_feuchte_input)

        # centervboxlayout
        center_voboxlayout = qtw.QVBoxLayout()
        #
        # center_voboxlayout.addStretch()
        # center_voboxlayout.setStretchFactor()
        # center_voboxlayout.addSpacing()
        # center_voboxlayout.setStretchFactor()

        #
        # table_widget.setMinimumSize(90,80)

        center_voboxlayout.addWidget(table_widget)


        # righvobxlayout
        # buttons
        self.button_1 = qtw.QPushButton("Button 1")
        self.button_2 = qtw.QPushButton("Button 2")
        self.button_2 = qtw.QPushButton("Button 3")


        rightvboxlayout = qtw.QVBoxLayout()
        rightvboxlayout.addStretch(1)
        rightvboxlayout.addWidget(self.button_1)
        rightvboxlayout.addWidget(self.button_2)
        rightvboxlayout.addWidget(self.button_2)



        #
        #
        # Separador = qtw.QFrame()
        # # Separador.Shape(QFrame.HLine)
        # Separador.setFrameShape(qtw.QFrame.HLine)
        #
        # Separador.setSizePolicy(qtw.QSizePolicy.Minimum,qtw.QSizePolicy.Expanding)
        # Separador.setLineWidth(5)
        # # HPOUT1_layout = QVBoxLayout()
        # # HPOUT1_layout.addLayout(HPOUT1L_layout)
        # # HPOUT1_layout.addWidget(Separador)
        # # HPOUT1_layout.addLayout(HPOUT1R_layout)


        ## main layout
        self.qhboxlayout = qtw.QHBoxLayout()
        self.qhboxlayout.addLayout(left_vboxlayout,20)
        self.qhboxlayout.addLayout(center_voboxlayout,80)
        self.qhboxlayout.addLayout(rightvboxlayout,20)
        #
        # ### Main Grid

        # -------------------------------------------------- #
        selected_color = qtg.QColor(0,0,255)

        # self.setGeometry(300, 300, 1850, 950)
        self.setStyleSheet("background-color: {}")
        self.setLayout(self.qhboxlayout)

        self.show()


if __name__ == '__main__':
    app = qtw.QApplication(sys.argv)
    w = Stretchme()
    sys.exit(app.exec_())
© www.soinside.com 2019 - 2024. All rights reserved.