gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 14:14:08 39 4
gpt4 key购买 nike

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

因此我尝试使用 3 个 vboxlayout 并将它们插入到 hboxlayout 中

到目前为止,小部件的大小是固定的,因此它们在拉伸(stretch)时会以相同的速率扩展。

有没有一种更简单的方法可以使中心布局宽度变大,例如插入一个垫片而不更改每个小部件的 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_())

最佳答案

试试这个:

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

    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_())

关于python - 更改pyqt中嵌套布局的扩展空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62121445/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com