我正在使用PyQt5。我创建了一个窗口,然后添加了一个小部件。并将窗口小部件的sizepolicy设置为水平扩展,而不是垂直扩展。我故意没有在主窗口顶部添加任何QLayout()来检查sizepolicy是否正常工作。令我惊讶的是,但是,当我添加QLayout()时,它确实起作用了。
为什么让我感到惊讶?我检查了QT的官方文档,并说:
如果存在一个QLayout来管理此小部件的子级,则使用该布局指定的大小策略。如果没有这样的QLayout,则使用此函数的结果。
(我不清楚他们指的是什么功能)
https://i.stack.imgur.com/41pwc.jpg
https://doc.qt.io/qt-5/qwidget.html#sizePolicy-prop
我从文档中得到的是,如果窗口顶部有一个QLayout,然后该布局包含更多小部件,则该布局所保存的小部件的sizepolicy将由QLayout()控制。如果没有QLayout(),则使用一些与小部件的sizepolicy相关的单独函数。
在我的代码中,我尝试实现该方案。但是,按照我对官方文档的理解,它不起作用。
from PyQt5 import QtWidgets
app = QtWidgets.QApplication([])
window = QtWidgets.QWidget()
window.setGeometry(50, 50, 500, 300)
menu_bar = QtWidgets.QMenuBar(window)
menu_bar.setGeometry(0, 0, 500, 22)
size_policy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding,
QtWidgets.QSizePolicy.Fixed)
menu_bar.setSizePolicy(size_policy)
menu_bar.addMenu("File")
menu_bar.addMenu("Edit")
# lay = QtWidgets.QHBoxLayout()
# lay.addWidget(menu_bar)
# window.setLayout(lay)
window.show()
app.exec()