首页 > 解决方案 > PyQt 自定义小部件不可见

问题描述

按照“创建简单 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_()

标签: pythonqtpyqt

解决方案


__init__在of中执行以下任何customWidget操作(它们在概念上是相同的):

  • 创建布局self.setLayout(layout) 添加;
  • 改为; layout = QHBoxLayout()_layout = QHBoxLayout(self)

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

在实践中,customWidget实例可以知道关于这些对象的任何信息,因此没有理由显示它们。

我还建议您:

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

推荐阅读