PyQt 将 graphicsScene 对象分组为一个对象

Posted

技术标签:

【中文标题】PyQt 将 graphicsScene 对象分组为一个对象【英文标题】:PyQt grouping graphicsScene objects into one object 【发布时间】:2013-04-04 12:45:57 【问题描述】:

背景:我正在尝试使用 python 和 pyqt 制作网格工具。具体来说,我想使用 graphicsView/graphicsScene 组合来允许用户放置和编辑网格部分。在这种情况下,网格只是垂直线的集合。

类似:

问题:如何将一组线条组合成一个对象,以便线条集合充当一个对象(即上下文菜单、拖动等)

当前代码:(仅图形类)

from PyQt4 import QtGui, QtCore

class graphicsView(QtGui.QGraphicsView):
    def __init__(self,parent=None):
        super(graphicsView, self).__init__(parent)
        self.parent=parent
    def wheelEvent(self,event):
        super(graphicsView, self).wheelEvent(event)
        factor = 1.2
        if event.delta()<0:
            factor = 1.0/factor
        self.scale(factor,factor)

class graphicsScene(QtGui.QGraphicsScene):
    def __init__(self,parent=None):
        super(graphicsScene, self).__init__(parent)
        self.meshPen=QtGui.QPen(QtCOre.Qt.blue, 1, QtCore.Qt.SolidLine)
    def newGrid(self, xmax,ymax,xcells,ycells,xmin=0,ymin=0):
        for i in range(xcells+1):
            x=i*(xmax-xmin)/xcells-abs(xmin)
            self.addLine(x,ymin,x,ymax,self.meshPen)
        for j in range(ycells+1):
            y=j*(ymax-ymin)/ycells-abs(ymin)
            self.addLine(xmin,y,xmax,y,self.meshPen)

系统: Python 2.7.2、PyQt4 4.9.5-2、Windows 7


可能的解决方案:(我的随机想法)

    在网格顶部实现一个不可见的矩形来处理交互

【问题讨论】:

【参考方案1】:

另一种方法是QGraphicsItemGroup:

def newGrid(...):
     group = QtGui.QGraphicsItemGroup(scene=self)
     group.setFlag(QtGui.QGraphicsItem.ItemIsMovable) #let't test how it works

     for i in range(xccells + 1):
         ...
         group.addToGroup(self.addLine(x,ymin,x,ymax,self.meshPen))
     ...

【讨论】:

不错。我没有意识到有一个 QGraphicsItemGroup。我得试试看。

以上是关于PyQt 将 graphicsScene 对象分组为一个对象的主要内容,如果未能解决你的问题,请参考以下文章

PyQt5 小工具:Excel数据分组汇总器...

qt graphicsscene line 子类

Qt GraphicsScene XOR Line 或 Line 在单独的层中?

GraphicsScene 中的 Qt GLWidget 用于从图像数据(C++、Windows)中快速显示视频?

PyQt中对RadioButton分组

如何设置应用程序的任务栏图标在Windows 7-qt,windows-7,pyqt