PyQt 自定义小部件不可见

PyQt custom widget not visible

按照“创建简单的 GUI”中概述的示例,我尝试创建自定义小部件,但似乎没有显示任何内容。这似乎是我能想象到的最简单的小部件,但仍然缺少一些东西,我不知道是什么。

from PyQt5.QtWidgets import *
import sys
class customWidget(QWidget):
    def __init__(self, *args, **kwargs):
        super(customWidget, self).__init__(*args, **kwargs)
        layout = QHBoxLayout()
        label = QLabel("Que chinga")
        layout.addWidget(label)
class MainWindow(QMainWindow):
    def __init__(self, *args, **kwargs):
        super(MainWindow, self).__init__(*args, **kwargs)
        self.setWindowTitle("Esta locura")
        label = customWidget()
        self.setCentralWidget(label)
app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec_()

customWidget__init__ 中执行以下任一操作(它们在概念上是相同的):

  • 在创建布局后添加self.setLayout(layout)
  • layout = QHBoxLayout() 更改为 layout = QHBoxLayout(self)

原因是您没有为小部件设置布局,因此 QLabel 没有父级,不会单独显示。

实际上,customWidget 实例可能知道这些对象的任何信息,因此没有理由显示它们。

我还建议你:

  1. 阅读 classes and instances:虽然它与此问题没有直接相关,但它有很多共同点,因为 Qt 对象的亲子关系(例如QWidget sub类) 与实例的 OOP 方面密切相关。
  2. 始终为 类 使用大写名称(CustomWidget,而不是 customWidget),因为小写名称只能用于变量和函数名称。