PyQt5布局设置:如何让中间部件占比更大并维持窗口缩放比例?
PyQt5实现横向布局部件按固定比例分配宽度
要让横向布局里的红色、黄色、紫色部件按30%、40%、30%的比例分配宽度,且窗口调整大小时维持该比例,只需利用QHBoxLayout的**拉伸因子(stretch)**参数即可实现。
修改后的完整代码
from PyQt5.QtGui import * from PyQt5.QtWidgets import * from PyQt5.QtCore import * import sys class Color(QWidget): def __init__(self, color): super(Color, self).__init__() self.setAutoFillBackground(True) self.color = color palette = self.palette() palette.setColor(QPalette.Window, QColor(self.color)) self.setPalette(palette) class MainWindow(QMainWindow): def __init__(self): super(MainWindow, self).__init__() self.setWindowTitle("My App") self.setMinimumWidth(600) self.setMinimumHeight(400) main_div = QVBoxLayout() main_div.setContentsMargins(0,0,0,0) main_div.setSpacing(0) layout2 = QHBoxLayout() # 通过stretch参数设置宽度比例:3:4:3 对应 30%:40%:30% layout2.addWidget(Color('red'), stretch=3) layout2.addWidget(Color('yellow'), stretch=4) layout2.addWidget(Color('purple'), stretch=3) main_div.addLayout(layout2) main_div.addWidget(Color('blue')) self.widget = QWidget() self.widget.setLayout(main_div) self.setCentralWidget(self.widget) def resizeEvent(self,event): pass app = QApplication(sys.argv) window = MainWindow() window.show() app.exec_()
原理说明
QHBoxLayout的addWidget方法第二个参数stretch用于定义部件的拉伸权重:
- 布局会按照所有部件的stretch值总和,按比例分配可用宽度
- 这里设置3、4、3,总和为10,正好对应30%、40%、30%的比例
- 当窗口调整大小时,布局会自动按该比例重新分配宽度,保持比例不变
注意:如果部件设置了固定宽度或最小宽度超过了比例分配的宽度,比例会暂时失效,直到窗口宽度足够让所有部件满足比例分配的尺寸。
内容的提问来源于stack exchange,提问作者Scott Rowley
相关产品推荐
相关产品推荐

