我有两个小部件彼此相邻,WidgetA
并且WidgetB
在 aQDialog
上具有水平布局管理器。
我正在尝试执行以下大小/调整大小策略:
对于WidgetA
:
- 水平方向:宽度应为 900,并且可以收缩(最多 100)和扩展(任意)。
- 垂直:高度应该是 600,并且可以扩展(到任何东西)。
对于WidgetB
:
- 水平:宽度应固定为 600。
- 垂直:高度应为 600,具有扩展(到任何)的能力 - 与
WidgetA
.
但是无论我为 WidgetA 选择哪种尺寸策略,它仍然不会占用 900 的宽度。
这是一个代码示例:
class WidgetA(QTextEdit):
def __init__(self, parent = None):
super(WidgetA, self).__init__(parent)
#self.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.MinimumExpanding) --> WidgetA width still smaller than 900
#self.setSizePolicy(QSizePolicy.Ignored, QSizePolicy.MinimumExpanding) --> WidgetA will be set to minimumSizeHint()
#self.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.MinimumExpanding) --> not good for me, since I want WidgetA to be able to shrink up to minimumSizeHint().width()
#self.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.MinimumExpanding) --> not good for me for the same reason - I want WidgetA to be able to shrink up to minimumSizeHint().width()
def minimumSizeHint(self):
return QSize(100, 600)
def sizeHint(self):
return QSize(900, 600)
class WidgetB(QTextEdit):
def __init__(self, parent = None):
super(WidgetB, self).__init__(parent)
self.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.MinimumExpanding)
def sizeHint(self):
return QSize(600, 600)
class MainForm(QDialog):
def __init__(self, parent = None):
super(MainForm, self).__init__(parent)
label_a = QLabel('A')
widget_a = WidgetA()
label_a.setBuddy(widget_a)
label_b = QLabel('B')
widget_b = WidgetB()
label_b.setBuddy(widget_b)
hbox = QHBoxLayout()
vbox = QVBoxLayout()
vbox.addWidget(label_a)
vbox.addWidget(widget_a)
widget = QWidget()
widget.setLayout(vbox)
hbox.addWidget(widget)
vbox = QVBoxLayout()
vbox.addWidget(label_b)
vbox.addWidget(widget_b)
widget = QWidget()
widget.setLayout(vbox)
hbox.addWidget(widget)
self.setLayout(hbox)
def run_app():
app = QApplication(sys.argv)
form = MainForm()
form.show()
app.exec_()
if __name__ == '__main__':
run_app()
我能得到的最接近的是当我设置时:
self.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.MinimumExpanding)
上WidgetA
。
似乎是从900 宽度WidgetB
中咬了一口(消除就可以了),但我不应该受到窗口宽度的限制。
是什么阻止了窗口本身()自动水平扩展以考虑900 宽度和600 固定宽度?WidgetA
WidgetB
MainForm
WidgetA
WidgetB