为什么显示这个QLabel?



当我运行以下代码时,即使尚未添加到任何布局中,也会显示label小部件(?(。 我关注的教科书也暗示我不应该看到它(直到我将其添加到布局中(,但它还是出现了。我期待看到一个空的窗户。有什么想法吗?

import sys
from PyQt5 import QtWidgets as qtw
from PyQt5 import QtGui as qtg
from PyQt5 import QtCore as qtc
class MainWindow(qtw.QWidget):
def __init__(self):
"""MainWindow constructor"""
super().__init__(windowTitle='Hello world')
# QWidget
subwidget = qtw.QWidget(self, toolTip='This is my widget')
subwidget.setToolTip('This is YOUR widget')
print(subwidget.toolTip())
# QLabel
label = qtw.QLabel('<b>Hello Widgets!</b>', self, margin=10)
self.show()
if __name__ == '__main__':
app = qtw.QApplication(sys.argv)
mw = MainWindow()
sys.exit(app.exec())

你所期望的是不正确的,我不会指出关于这本书的任何内容,因为你没有指出它是什么书,也没有指出引文表明你可能误解了作者指出的内容。


如果第一个微件是第二个微件的子构件或小部件中已显示的微件的子项,则该微件将显示为另一个微件的一部分。

在传递"self"的示例中,您指出 QLabel 是窗口的子级:

print(subwidget.parentWidget())
print(label.parentWidget())

输出:

<__main__.MainWindow object at 0x7f10757a4dc0>
<__main__.MainWindow object at 0x7f10757a4dc0>

因此,如果它有效,则会显示它们。

那么,如果未设置为父级,为什么会显示在布局中设置的小部件呢?好吧,当内部建立布局时,它确定小部件的父级是建立布局的小部件

class MainWindow(qtw.QWidget):
def __init__(self):
super().__init__(windowTitle="Hello world")
btn1 = qtw.QPushButton("btn1")
btn2 = qtw.QPushButton("btn2")
lay = qtw.QVBoxLayout(self)
lay.addWidget(btn1)
lay.addWidget(btn2)
print(btn1.parentWidget())
print(btn2.parentWidget())

输出:

<__main__.MainWindow object at 0x7faf9ced2e50>
<__main__.MainWindow object at 0x7faf9ced2e50>

结语:

如果小部件是后者的子项,则小部件将显示为另一个小部件的一部分。有一些特殊情况,例如隐藏小部件,确定子小部件是一个弹出窗口。

最新更新