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
实例可能知道这些对象的任何信息,因此没有理由显示它们。
我还建议你:
- 阅读 classes and instances:虽然它与此问题没有直接相关,但它有很多共同点,因为 Qt 对象的亲子关系(例如QWidget sub类) 与实例的 OOP 方面密切相关。
- 始终为 类 使用大写名称(
CustomWidget
,而不是 customWidget
),因为小写名称只能用于变量和函数名称。
按照“创建简单的 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
实例可能知道这些对象的任何信息,因此没有理由显示它们。
我还建议你:
- 阅读 classes and instances:虽然它与此问题没有直接相关,但它有很多共同点,因为 Qt 对象的亲子关系(例如QWidget sub类) 与实例的 OOP 方面密切相关。
- 始终为 类 使用大写名称(
CustomWidget
,而不是customWidget
),因为小写名称只能用于变量和函数名称。