У меня есть набор кнопок QSvgGraphicsItem, которые я хотел бы сгруппировать как часть единого пользовательского интерфейса, чтобы сделать их подвижными в QGraphicsScene.Когда я группирую их, они больше не отвечают на mousePressEvents.
Я пытался поместить eventFilters в QGraphicsItemGroup, на каждый отдельный QSvgGraphicsItem.Я искал бесконечные примеры того, как они настроены для отдельных элементов, но я не могу найти примеров того, как установить их на группу элементов.В следующем коде показано, как мне удалось передать события каждой кнопке, переопределив 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