How to let sibling windows accept event?

44 Views Asked by At

I write a simple window, when cursor in QLineEdit and press Enter Key, I want the QGraphicsRectItem, QGraphicsScene, QGraphicsView and QWidget also accept QKeyEvent or MyEvent(customize event).I have no idea to do it,Could someone have good method to do this?

Code Sample

from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *

class MyEvent(QEvent):
    Type = QEvent.registerEventType()
    def __init__(self):
        super().__init__(MyEvent.Type)
        self._data = "test"

class Item(QGraphicsRectItem):
    def __init__(self):
        super().__init__()
        self.setRect(0 ,0,  100, 100)
        self.setBrush(Qt.red)
        self.setFlags(QGraphicsItem.ItemIsFocusable)

    def keyPressEvent(self, event: QKeyEvent) -> None:
        print("Item KeyPress", event.key())
        return super().keyPressEvent(event)

class Scene(QGraphicsScene):
    def keyPressEvent(self, event: QKeyEvent) -> None:
        print("Scene KeyPress", event.key())
        return super().keyPressEvent(event)

class View(QGraphicsView):
    def keyPressEvent(self, event: QKeyEvent) -> None:
        print("View KeyPress", "do something work here", event.key())
        return super().keyPressEvent(event)

class MainWindow(QWidget):
    def __init__(self):
        super().__init__()
        lay = QVBoxLayout()
        view = View()
        scene = Scene()
        scene.addItem(Item())
        view.setScene(scene)
        lay.addWidget(view)
        lay.addWidget(QLineEdit("Cursor In here, post Enter Event to QGraphicsView"))
        self.setLayout(lay)
        self.show()

        self.view = view

    def keyPressEvent(self, e: QKeyEvent) -> None:
        print("QWidget KeyPress", e.key())

        # myEvent = MyEvent()
        # QApplication.postEvent(myEvent)
        return super().keyPressEvent(e)

app = QApplication([])
m = MainWindow()
app.exec()

How let others item also get the event? enter image description here

0

There are 0 best solutions below