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

2024-09-29 00:12:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我想设置一个全局对象“view”,它有一个class方法 我怎样才能实现它。

我用

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)))

Tags: posselfeventviewifinitdefstart
2条回答

通过编写def __init__(self, parent):,可以强制视图具有父视图。你知道吗

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

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

在实例化类时,如果不包含参数,就不能在__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()

然后你可以访问它的方法

相关问题 更多 >