gpt4 book ai didi

python - 为什么会显示这个 QLabel?

转载 作者:行者123 更新时间:2023-12-01 06:28:02 25 4
gpt4 key购买 nike

当我运行以下代码时,label 小部件 (?) 会显示,即使它尚未添加到任何布局中。我正在遵循的教科书还暗示我不应该看到它(直到我将其添加到布局中),但它无论如何都会出现。我期待看到一个空 window 。有什么想法吗?

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>
<小时/>

结论:

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

关于python - 为什么会显示这个 QLabel?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60031089/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com