gpt4 book ai didi

python - 从 QGraphicsView 转到 QMainWindow 现在 keyPressEvent 看不到箭头键

转载 作者:行者123 更新时间:2023-12-01 05:56:40 24 4
gpt4 key购买 nike

我正在尝试了解 PyQt4 中的事件处理,并偶然发现了一个案例在我更改类定义后,keyPressEvent 可以看到除箭头键之外的所有键。

从查看所有键:

class MaskWindow(QtGui.QGraphicsView):
def __init__(self):
QtGui.QGraphicsView.__init__(self)

self.deskTop = QtGui.QDesktopWidget()
self.scene = QtGui.QGraphicsScene(self)

看不到箭头键、向下翻页和向上翻页,但其他键可以使用,例如TabShifta-z:

class MaskWindow(QtGui.QMainWindow):
def __init__(self):
QtGui.QMainWindow.__init__(self, None, QtCore.Qt.WindowStaysOnTopHint|
QtCore.Qt.FramelessWindowHint)

self.deskTop = QtGui.QDesktopWidget()
self.view = QtGui.QGraphicsView(self)
self.scene = QtGui.QGraphicsScene(self)

这是按键处理程序,箭头键不再被捕获:

def keyPressEvent(self, event):
key = event.key()
if key == QtCore.Qt.UpArrow
self.diameter += 1
if key == QtCore.Qt.DownArrow:
self.diameter -= 1

类(class)变更让我错过了什么?

最佳答案

您重新实现的keyPressEvent函数使用了错误的枚举常量。

它应该使用 QtCore.Qt.Key枚举:

def keyPressEvent(self, event):
key = event.key()
if key == QtCore.Qt.Key_Up:
self.diameter += 1
if key == QtCore.Qt.Key_Down:
self.diameter -= 1

并且可以使用setWidowFlags在任何小部件(包括QGraphicsView)上更改窗口标志。功能:

class MaskWindow(QtGui.QGraphicsView):
def __init__(self):
QtGui.QGraphicsView.__init__(self)
self.setWindowFlags(self.windowFlags() |
QtCore.Qt.WindowStaysOnTopHint |
QtCore.Qt.FramelessWindowHint)

更新

重新实现的 keyPressEvent 无法与示例中的 QMainWindow 一起使用的原因是因为它不再获得任何按键事件 - 它们会消失到具有键盘焦点的子部件。

解决这个问题的一种方法是设置 event filter在您想要从中获取关键事件的小部件上:

class MaskWindow(QtGui.QMainWindow):
def __init__(self):
QtGui.QMainWindow.__init__(self, None,
QtCore.Qt.WindowStaysOnTopHint |
QtCore.Qt.FramelessWindowHint)
self.view = QtGui.QGraphicsView(self)
self.view.installEventFilter(self)
self.setCentralWidget(self.view)

def eventFilter(self, source, event):
if (source is self.view and
event.type() == QtCore.QEvent.KeyPress):
key = event.key()
if key == QtCore.Qt.Key_Up:
self.diameter += 1
elif key == QtCore.Qt.Key_Down:
self.diameter -= 1
return QtGui.QMainWindow.eventFilter(self, source, event)

关于python - 从 QGraphicsView 转到 QMainWindow 现在 keyPressEvent 看不到箭头键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12266192/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com