Как украсить класс pyqt5 с помощью dataclass? - PullRequest
0 голосов
/ 23 декабря 2019

Я пытаюсь использовать класс данных python3 для украшения класса pyqt5, но в моем методе кажется, что он не работает?

from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from dataclasses import dataclass

@dataclass()
class Demo(QWidget):
    name: str = 'jim'
    addr: str = 'usa'

app = QApplication([])
win = Demo()
win.show()
app.exec()

1 Ответ

2 голосов
/ 23 декабря 2019

В своем коде вы указываете, что в Qt есть член с именем Widget, который явно неверен, я рекомендую вам проанализировать то, что вы предоставляете, поскольку его можно квалифицировать как опечатку.

Но даже исправление этой ошибки не будет работать, поскольку, если вы реализуете класс данных в классе, который наследуется от другого класса, вы должны реализовать метод __post_init__, где вы должны вызвать super() метод:

from dataclasses import dataclass
import sys

from PyQt5 import QtWidgets


@dataclass
class Demo(QtWidgets.QWidget):
    name: str = "jim"
    addr: str = "usa"

    def __post_init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    win = Demo()
    print(win.name, win.addr)
    win.show()
    sys.exit(app.exec_())
...