包含默认 PyQt5 QWidget 的 NamedTuple(或数据类)

NamedTuple (or dataclass) containing default PyQt5 QWidget

我正在尝试使用 NamedTuple 创建一个数据结构(如果需要,我可以切换到数据类!)以包含 PyQt5 QWidget。我需要设置小部件的类型,但也想设置一个默认值。

当我检查 type(PyQt5.QtGui.QLabel()) 它时 returns <class 'PyQt5.QtWidgets.QLabel'>

正在尝试

from typing import NamedTuple
import PyQt5

class myStat(NamedTuple):
     name:str
     value:float=0.0
     qlabel:PyQt5.QWidgets.QLabel=PyQt5.QtGui.QLabel()

我无法使用 from myFile import myStat 将其导入我的实际应用程序 我收到错误消息`QWidget:必须在 QWidget 之前构造一个 QApplication。

关于如何做到这一点有什么建议吗?在我的应用程序中,我正在尝试做

x=myStat(name='foo',value=5.0)

但它显然还没有到达那里,因为它在导入时失败了。

错误是因为对象是在声明class时创建的,但此时QApplication还没有创建,一个可能的解决方法是在data[=中使用default_factory 14=],但无论如何,当您创建对象时,它必须已经创建了一个 QApplication :

import sys
from dataclasses import dataclass, field

from PyQt5.QtWidgets import QApplication, QLabel


@dataclass
class MyStat:
    name: str
    value: float = 0.0
    qlabel: QLabel = field(default_factory=QLabel)


def main():
    app = QApplication(sys.argv)

    x = MyStat(name="foo", value=5.0)
    print(x.qlabel)
    x.qlabel.show()

    sys.exit(app.exec_())


if __name__ == "__main__":
    main()