我想将主窗口的小部件分成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_())
尝试一下:
您将通过以下方式决定为每个布局分配多少空间:
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_())