这个问题有两个错误的假设。
-
QComboBox的列表是
弹出窗口
小部件,它不关心(也不应该)关于组合框可用的空间:考虑它就像一个弹出的上下文菜单一样。
结束
窗口,如果需要更多空间,可能会超出其边界(这只是因为这些边界对菜单没有意义);
-
该组合已添加到布局管理器中,该管理器负责调整其大小和位置(
管理
)子部件,这就是为什么不能手动“移动”它们:布局已经在每次调整部件大小时自动设置几何图形(第一次显示时也会发生),因此任何尝试使用
move()
,
resize()
或
setGeometry()
完全没有用;
向布局中添加小部件时,默认行为是使其占据尽可能多的空间;由于QComboBox是具有固定大小的小部件之一,其结果是它实际上位于布局“分配”给它的空间的中心(垂直和水平),在您的情况下,这是显而易见的,因为您为容器小部件设置了一个固定大小,该大小远远大于其内容所需的大小。
有两种方法可以在顶部对齐这些小部件:
-
添加
alignment
争论
addWidget
:
hbox.addWidget(combo, alignment=QtCore.Qt.AlignTop)
hbox.addWidget(self.lbl, alignment=QtCore.Qt.AlignTop)
请注意,在您的情况下,这不会给您带来好的结果,因为标签和组合框的高度不同,所以标签可能看起来比组合框“更高”;
-
使用QVBoxLayout布局作为小部件的主布局,向其添加水平布局,然后添加
伸展
之后(a)
伸展
在盒子布局上有一个“间隔物”,它试图占据尽可能多的空间)
# ...
mainLayout = QVBoxLayout()
mainLayout.addLayout(hbox)
mainLayout.addStretch()
self.setLayout(mainLayout)
PS:如果需要向QComboBox添加大量(仅限字符串)元素,请使用
addItems()
而不是逐个添加它们。