我有一组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