我有两个小部件,一个是
我正在尝试实施以下大小/调整策略:
对于
以下是代码示例:
最接近的设置是当我设定:
WidgetA
,另一个是WidgetB
,它们相邻放置在一个QDialog
上,并使用水平布局管理器。我正在尝试实施以下大小/调整策略:
对于
WidgetA
:
- 水平方向:宽度应为900,具有收缩能力(最多100),以及扩展能力(到任何值)。
- 垂直方向:高度应为600,具有扩展能力(到任何值)。
WidgetB
:
- 水平方向:宽度应固定为600。
- 垂直方向:高度应为600,具有扩展能力(到任何值),与
WidgetA
相同。
以下是代码示例:
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
上。
看起来像是WidgetB
占用了 WidgetA
的900宽度(移除 WidgetB
就可以解决),但我不应该受制于窗口的宽度。
是什么阻止了窗口本身(MainForm
)自动水平扩展以便同时考虑 WidgetA
的900宽度和 WidgetB
的固定600宽度?