我在项目中使用了 QSplitter ,想要设置两个小部件的拉伸因子(stretch factor)。下面的代码是推荐的:
splitter.setStretchFactor(0, 1)
splitter.setStretchFactor(1, 5)
我需要首先隐藏一个小部件,然后在点击一个按钮后显示它。 我发现stretch factor不起作用。 整个代码如下:
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
import sys
class MainWindow(QWidget):
def __init__(self):
super().__init__()
mainLayout = QVBoxLayout()
self.setLayout(mainLayout)
self.btn = QPushButton('show')
self.btn.clicked.connect(self.btnSlot)
mainLayout.addWidget(self.btn)
layout = QHBoxLayout()
mainLayout.addLayout(layout)
self.w1 = QWidget()
self.w1.setStyleSheet('border: 2px solid #777;')
self.w1.hide()
self.lay1 = QVBoxLayout()
self.lay1.addWidget(QLabel('label 1'))
self.w1.setLayout(self.lay1)
w2 = QWidget()
w2.setStyleSheet('border: 2px solid red;')
self.lay2 = QVBoxLayout()
w2.setLayout(self.lay2)
splitter = QSplitter()
splitter.addWidget(self.w1)
splitter.addWidget(w2)
splitter.setStretchFactor(0, 1)
splitter.setStretchFactor(1, 5)
layout.addWidget(splitter)
def btnSlot(self, check=False):
self.w1.show()
self.lay2.addWidget(QLabel('label 2'))
if __name__ == '__main__':
app = QApplication(sys.argv)
w = MainWindow()
w.show()
app.exec_()
点击“显示”按钮后,结果如下:
从上图可见,小部件1/2的拉伸因子不是1:5。我该如何使拉伸因子为1:5?
欢迎提出任何建议!
有效拉伸因子=拉伸*初始小部件大小
。由于widget1是隐藏的,因此初始小部件大小
是未知的,这使得setStretchFactor
无法正常工作。我的理解正确吗? - Qiang Zhang