无法将 Python 数据类与 PyQt5 小部件一起使用

Can't use Python dataclass with PyQt5 widget

我有一个 class 存储了一些 Qt 控件,所以:

class Controls:
    def __init__(self):
        self.label = QLabel()

那我可以做:

x = Controls()
x.label.setText("Hello")

这行得通。 class实际上有几十个控件,不仅仅是我用来说明的那个,所以我想使用更简洁的数据class表示法:

@dataclass(frozen=True, init=False)
class Controls:
    label: QLabel

但是这样做之后,我得到一个错误:

AttributeError: 'Controls' object has no attribute 'label'

我试过初始化字段 (= QLabel()),我也试过将 fielddefaultdefault_factory 一起使用,但没有成功。

不知道有没有人知道问题出在哪里?

你必须让构造函数被实现(移除init=False):

from dataclasses import dataclass, field

@dataclass(frozen=True)
class Controls:
    label: QLabel = field(default_factory=QLabel)