如何在 PyQt 的 QGraphicsViews 中使用自定义绘图?

Posted

技术标签:

【中文标题】如何在 PyQt 的 QGraphicsViews 中使用自定义绘图?【英文标题】:How to use custom drawing in QGraphicsViews in PyQt? 【发布时间】:2010-06-06 03:59:56 【问题描述】:

我需要在 2 QGraphicsViews 中查看 QGraphicsScene,条件是它们对场景中的项目具有不同的比例因子。我找到的最接近的函数是drawItems(),但据我所知,它必须手动调用。如何自动重绘视图? 我在程序中有这两个代码片段:

class TGraphicsView(QGraphicsView):

    def __init__(self, parent = None):
        print("__init__")
        QGraphicsView.__init__(self, parent)

    def drawItems(self, Painter, ItemCount, Items, StyleOptions):
        print("drawItems")
        Brush = QBrush(Qt.red, Qt.SolidPattern)
        Painter.setBrush(Brush)
        Painter.drawEllipse(0, 0, 100, 100)

...

    Mw.gvNavigation = TGraphicsView(Mw) # Mw - main window
    Mw.gvNavigation.setGeometry(0, 0, Size1, Size1)
    Mw.gvNavigation.setScene(Mw.Scene)
    Mw.gvNavigation.setSceneRect(0, 0, Size2, Size2)
    Mw.gvNavigation.show()

__init__ 有效,Mw.gvNavigation 被显示,其中有Mw.Scene items,但drawItems() 没有被调用。

【问题讨论】:

【参考方案1】:

QGraphicsView 和 QGraphicsScene 对象上的 drawItems 方法在 Qt 4.6 中已弃用,必须使用 IndirectPainting 标志启用,但我不建议使用已弃用的功能。

这是另一个 stack overflow question 类似的问题。其中一个答案显示了如何使场景中各个项目的绘制方法知道哪个视图正在绘制它们,并在不同视图中绘制时使用不同的绘制代码。

【讨论】:

以上是关于如何在 PyQt 的 QGraphicsViews 中使用自定义绘图?的主要内容,如果未能解决你的问题,请参考以下文章

移除 QGraphicsView 周围的蓝色焦点边框

如何在 PyQt6 中检查 MouseButtonPress 事件?

如何更新 PyQt5?

如何在不使用 pip 的情况下安装 pyqt5 和 pyqt5-tools?

在 PyQt 中关闭窗口后如何检索属性值?

如何在 spynner/PyQt4 中设置应用程序名称?