在QGraphicsItemGroup

时间:2019-05-09 20:59:27

标签: python pyqt pyqt5 python-3.7

我有一组QSvgGraphicsItem按钮,我希望将它们组合在一起作为单个用户界面的一部分,以便在QGraphicsScene中可移动。当我将它们分组时,它们不再响应mousePressEvents。

我尝试将eventFilters放在每个单独的QSvgGraphicsItem的QGraphicsItemGroup中。我查找了无数示例,说明如何为单个项目设置它们,但是我找不到有关如何将它们安装在一组项目上的任何示例。下面的代码是我如何通过重新定义mousePressEvent来将事件传递给每个按钮的方法,但是当我尝试将整个接口与CreateGraphicsItemGroup分组在一起,以使其作为一个单元移动时,按钮将失去获取其mousePressEvents的能力。 ,然后我无法切换到另一个菜单。我找到了一种解决方法,但是将整个程序的每个鼠标事件都放在主mousePressEvent中,并检查鼠标所处的边界框似乎并不是最优雅的处理方式...

class User(QGraphicsWidget):
    def __init__(self, parent=None):
        super(User, self).__init__(parent)

        self.Ptolemy = parent
        print("USER PARENT: ", self.Ptolemy)


        self.styles = self.Ptolemy.stylesheet

        self.x = self.Ptolemy.scene.width() / 2 - 76
        self.y = self.Ptolemy.scene.height() / 2 - 175
        self.w = 225
        self.h = 350
        self.centerx = self.x + self.w / 2
        self.centery = self.y + self.h / 2

        self.setGeometry(self.x, self.y, self.w, self.h)

        self.setStyleSheet(self.styles)
        self.setStyleSheet("QWidget { background-color: transparent; } ")

        self.output = self.Ptolemy.Philadelphos.setOutput
        self.interfaceImg = self.Ptolemy.pharosImg
        print("PATH:", self.interfaceImg)
        self.mediaDir = self.Ptolemy.mediaDir
        self.scene = self.Ptolemy.scene

        self.MONITOR = False

        # self.procTimer = QTimer()
        # self.procTimer.timeout.connect(self.switchMonitor)
        # self.procTimer.setSingleShot(True)

        self.identity = "Pharos"
        self.cwd = "*".join(self.Ptolemy.cwd()[1:].split("/")[-3:])

        self.setToolTip(self.identity + " Interface")
        images = os.listdir(self.interfaceImg)
        rand = randrange(len(images))
        self.bgImage = "nav_seal_200.png"

        self.initUi()

    def __del__(self):

        pass

    def initUi(self):

        self.btnSize = 23

        self.buildButtons()

        self.layout = QGridLayout(self)

        self.originalLayout()

        self.setLayout(self.layout)


    def mouseMoveEvent(self, event):
        print("Mouse Move Event")

        pass

    def buildButtons(self):

        self.blankBtn = QSvgWidget(self.interfaceImg + 'blank.svg')
        self.blankBtn.setFixedSize(self.btnSize, self.btnSize)

        self.powerBtn = QSvgWidget(self.interfaceImg + "power.svg")
        self.powerBtn.setFixedSize(self.btnSize, self.btnSize)
        self.powerBtn.setToolTip("Exit Program")
        self.powerBtn.mousePressEvent = self.power

        self.archimedesBtn = QSvgWidget(self.interfaceImg + 'archimedessymbol.svg')
        self.archimedesBtn.setFixedSize(self.btnSize, self.btnSize)
        self.archimedesBtn.setToolTip("Archimedes Menu")
        self.archimedesBtn.mousePressEvent = self.archimedesMenu

        self.alexandriaBtn = QSvgWidget(self.interfaceImg + 'alexandriasymbol.svg')
        self.alexandriaBtn.setFixedSize(self.btnSize, self.btnSize)
        self.alexandriaBtn.setToolTip('Alexandria Symbol')
        self.alexandriaBtn.mousePressEvent = self.alexandriaMenu


    def clearLayout(self):
        print("Clear Layout")

        for i in self.sysTrayList[2:-1]:
            code = 'self.{0}Btn.deleteLater()'.format(i)
            # print(code)
            exec(code)

        self.buildButtons()

        self.layout.addWidget(self.pharosBtn, 11, 1, 1, 1)

    def originalLayout(self):

        self.displayItem = self.layout.addWidget(self.display, 0, 0, 10, 10)
        self.powerItem = self.layout.addWidget(self.powerBtn, 11, 0, 1, 1)
        self.alexandriaItem = self.layout.addWidget(self.alexandriaBtn, 11, 1, 1, 1)
        self.archimedesItem = self.layout.addWidget(self.archimedesBtn, 11, 2, 1, 1)

    def power(self, event):
        exit()

        pass

    def archimedesMenu(self, event):
        print('Archimedes')
        self.UserDisplay.changeIdentity('Archimedes')
        self.clearLayout()
        self.layout.addWidget(self.graphBtn, 11, 2, 1, 1)

        pass

    def alexandriaMenu(self, event):
        print('Alexandria')
        self.UserDisplay.changeIdentity('Alexandria')
        self.clearLayout()
        self.layout.addWidget(self.coreBtn, 11, 2, 1, 1)
        self.layout.addWidget(self.earthBtn, 11, 3, 1, 1)

        pass

0 个答案:

没有答案