如何让同胞窗户接受事件?

发布于 2025-02-02 02:52:56 字数 2170 浏览 1 评论 0原文

我写了一个简单的窗口,当qlineedit中的光标中,我想要qgraphicsRectitemqgraphicsscene,, qgraphicsViewqwidget也接受qkeyeventmyEvent(自定义事件)。我不知道这样做,有人有很好的方法吗?

代码样本

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()

让其他项目还如何获得活动?

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文