我在研究Qt布局和窗口小部件管理,并遇到了我无法解释的行为。自动添加QLayout的目的是什么objectName'_layout'
我有以下层次结构中的基本UI:
MainWindow(QMainWindow) ->
centralwidget (QWidget),
menubar(QMenuBar),
statusbar(QStatusBar)
后来我补充几个布局和小部件的centralwidget,但是,我beleive,这不是重要的在这方面。现在
,如果我们检查主窗口的子对象及其对象名排序,我们将看到以下内容:
<PyQt5.QtWidgets.QLayout object at 0x00000000089425E8> _layout
<PyQt5.QtWidgets.QWidget object at 0x00000000087C6F78> centralwidget
<PyQt5.QtWidgets.QMenuBar object at 0x0000000008942048> menubar
<PyQt5.QtWidgets.QStatusBar object at 0x00000000089420D8> statusbar
出于某种原因,QLayout对象_layout
出现。但这并不是全部。在我看来,这个QLayout不是持久的,偶尔会被添加和删除,例如调整大小。
<PyQt5.QtWidgets.QLayout object at 0x0000000008942708> _layout
<PyQt5.QtWidgets.QLayout object at 0x00000000089425E8> _layout
<PyQt5.QtWidgets.QLayout object at 0x0000000008942798> _layout
<PyQt5.QtWidgets.QLayout object at 0x00000000089428B8> _layout
布局是存在的,但每一次的对象是新的:经过多次调整窗口大小我已经添加了resize事件的eventFilter,这里是对象的地址。
这是怎么回事吗?这个QLayout的目的是什么,以及它为什么这样表现?
谢谢你的解释!你是对的,由于某种原因,PyQt围绕相同的底层C++对象返回一个新的包装。我搜索了一种获取包装对象地址的方法,并找到''''sip.unwrapinstance(obj)'''。它为这些不同的Python包装返回相同的地址。 – wombatonfire