如何设置在类中定义的全局对象

时间:2019-05-04 14:59:36

标签: python object pyqt global

我想设置一个全局对象“ view”,它具有一个类方法 我该如何实现?

我使用

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 :(得分:0)

通过编写def __init__(self, parent):,您可以强制视图具有父级。

Qt小部件不必具有父级(当您使用setParent(),布局等将小部件添加到另一个小部件时,它会自动设置)。

您可以通过编写def __init__(self, parent=None): parent 参数添加默认值。 然后,使用V = View()

答案 1 :(得分:0)

实例化类时,不能在__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()

然后您就可以访问它的方法