包含默认 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()
我正在尝试使用 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()