Как установить глобальный объект, который определен в классе - PullRequest
0 голосов
/ 04 мая 2019

Я хотел бы установить глобальный объект "вид", и у него есть метод класса Как я могу достичь этого.

Я использую

V = View(self)
V = View(QGraphicsView)
V = View()

все не удалось

когда я использую третий тип, сообщение компилятора:

__init__() missing 1 required positional argument: 'parent'

вот мой класс хочет позвонить:

class View(QGraphicsView):

    def __init__(self, parent):
        QGraphicsView.__init__(self, parent)
        self.setScene(QGraphicsScene(self))
        self.setSceneRect(QRectF(self.viewport().rect()))


    def mousePressEvent(self, event):
        if can_draw == 1 :
            self._start = event.pos()

    def mouseReleaseEvent(self, event):
        if can_draw == 1:
            start = QPointF(self.mapToScene(self._start))
            end = QPointF(self.mapToScene(event.pos()))
            self.scene().addItem(
                QGraphicsLineItem(QLineF(start, end)))

Ответы [ 2 ]

0 голосов
/ 05 мая 2019

Вы не можете включить аргумент в __init__, не включив его при создании экземпляра класса.

Вам потребуется:

class View(QGraphicsView):

    def __init__(self):
        QGraphicsView.__init__(self, parent)
        self.setScene(QGraphicsScene(self))
        self.setSceneRect(QRectF(self.viewport().rect()))


    def mousePressEvent(self, event):
        if can_draw == 1 :
            self._start = event.pos()

    def mouseReleaseEvent(self, event):
        if can_draw == 1:
            start = QPointF(self.mapToScene(self._start))
            end = QPointF(self.mapToScene(event.pos()))
            self.scene().addItem(
                QGraphicsLineItem(QLineF(start, end)))

Тогда вы создадите его с помощью

v = View()

И тогда у вас есть доступ к его методам

0 голосов
/ 05 мая 2019

Написав def __init__(self, parent):, вы заставляете свой вид иметь родителя.

Виджет Qt не обязательно должен иметь родителя (Он будет автоматически установлен, когда вы добавите виджет в другой с помощью setParent(), макет и т. Д.).

Можно добавить значение по умолчанию для параметра parent , написав def __init__(self, parent=None):.Затем используйте V = View()

...