无法将 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()
),我也试过将 field
与 default
或 default_factory
一起使用,但没有成功。
不知道有没有人知道问题出在哪里?
你必须让构造函数被实现(移除init=False
):
from dataclasses import dataclass, field
@dataclass(frozen=True)
class Controls:
label: QLabel = field(default_factory=QLabel)
我有一个 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()
),我也试过将 field
与 default
或 default_factory
一起使用,但没有成功。
不知道有没有人知道问题出在哪里?
你必须让构造函数被实现(移除init=False
):
from dataclasses import dataclass, field
@dataclass(frozen=True)
class Controls:
label: QLabel = field(default_factory=QLabel)