我可以在 PyQt5 中 disable/delete class(即 QEvent.KeyPress)吗?
Can I disable/delete class in PyQt5 (i.e. QEvent.KeyPress)?
我正在开发基于 PyQt5 的应用程序。我的 GUI 显示 21 个按钮:从 A 到 Z 的字母,我将它们用作
的输入
主要算法。我也希望能够从键盘输入字母。
到目前为止Get printable name of any QKeyEvent key value 我能够做到这一点。
唯一的问题是如何禁用 keyPressevent ,并在我的应用程序介绍屏幕后重新启用它,
就像我用字母按钮做的那样:
self.groupBox.hide()
并在按下开始新游戏后重新启用它们
按钮。 self.groupBox.show()
我在回答中写下了 musicamante 提供的解决我问题的方法。我现在仍然想知道是否有一种方法可以以我的方式禁用 PyQt5 键盘事件处理:
def keyPressEvent(self, event):
print(keyevent_to_string(self, event))
print('self.letters : ',self.letters)
print('self.letters_guessed : ',self.letters_guessed )
if keyevent_to_string(self, event) in self.letters:
print('inininininini'*5)
self.printo(keyevent_to_string(self, event))
代码片段在那里,但当我按下键盘键时没有产生任何结果?
我知道 KeyPressEvent 是 QEvent.KeyPress 的处理程序,所以有没有办法在 Pyqt5 中 disable/delete/remove QEvent.KeyPress class ?
根据 musicamante 的建议,我修改了我的代码:
def keyPressEvent(self, event):
if self.keyonoff:
print(keyevent_to_string(self, event))
print('self.letters : ',self.letters)
print('self.letters_guessed : ',self.letters_guessed )
if keyevent_to_string(self, event) in self.letters:
print('inininininini'*5)
self.printo(keyevent_to_string(self, event))
然后切换
self.keyonoff = True
和 self.keyonoff = False
根据我的代码需要。
我得到了我想要的东西,不确定是否有其他方法
这样做:'I understood that KeyPressEvent is the handler for QEvent.KeyPress, so is there a way to disable/delete/remove QEvent.KeyPress class in Pyqt5 ?'
下面的代码不是我的,只是对我的目的有用的 keyPressEvent 重新植入
from PyQt5.QtCore import Qt
def keyevent_to_string(self, event):
self.keymap = {}
for self.key, value in vars(Qt).items():
if isinstance(value, Qt.Key):
self.keymap[value] = self.key.partition('_')[2]
self.modmap = {
Qt.ControlModifier: self.keymap[Qt.Key_Control],
Qt.AltModifier: self.keymap[Qt.Key_Alt],
Qt.ShiftModifier: self.keymap[Qt.Key_Shift],
Qt.MetaModifier: self.keymap[Qt.Key_Meta],
Qt.GroupSwitchModifier: self.keymap[Qt.Key_AltGr],
Qt.KeypadModifier: self.keymap[Qt.Key_NumLock],
}
self.sequence = []
for modifier, text in self.modmap.items():
if event.modifiers() & modifier:
self.sequence.append(text)
self.key = self.keymap.get(event.key(), event.text())
if self.key not in self.sequence:
self.sequence.append(self.key)
return '+'.join(self.sequence)
来自Get printable name of any QKeyEvent key value
已编辑已编辑已编辑
关于此的更多信息,希望我能获得回问问题的权利:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Fri May 29 10:49:58 2020
@author: Pietro
"""
import sys
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtCore import Qt, QEvent
class Window(QtWidgets.QMainWindow):
def __init__(self):
super(Window, self).__init__()
self.button = QtWidgets.QPushButton("activate", self)
self.button2 = QtWidgets.QPushButton("deactivate", self)
self.button.move(0,0)
self.button2.move(100,100)
self.button2.clicked.connect(self.deactivated)
self.button.clicked.connect(self.activated)
def activated(self):
print('attivato')
QWidget.setEnabled(self,True)
def deactivated(self):
print('deattivato')
QWidget.setEnabled(self,False)
def keyevent_to_string(self, event):
self.keymap = {}
for self.key, value in vars(Qt).items():
if isinstance(value, Qt.Key):
self.keymap[value] = self.key.partition('_')[2]
self.modmap = {
Qt.ControlModifier: self.keymap[Qt.Key_Control],
Qt.AltModifier: self.keymap[Qt.Key_Alt],
Qt.ShiftModifier: self.keymap[Qt.Key_Shift],
Qt.MetaModifier: self.keymap[Qt.Key_Meta],
Qt.GroupSwitchModifier: self.keymap[Qt.Key_AltGr],
Qt.KeypadModifier: self.keymap[Qt.Key_NumLock],
}
self.sequence = []
for modifier, text in self.modmap.items():
if event.modifiers() & modifier:
self.sequence.append(text)
self.key = self.keymap.get(event.key(), event.text())
if self.key not in self.sequence:
self.sequence.append(self.key)
return '+'.join(self.sequence)
def keyPressEvent(self, event):
print(self.keyevent_to_string(event))
if __name__ == '__main__':
app = QApplication(sys.argv)
window = Window()
window.setGeometry(600, 100, 300, 200)
window.show()
sys.exit(app.exec_())
我最终来到这里
QWidget.setEnabled(False)
显然禁用了键盘和鼠标事件。知道如何仅禁用键盘事件吗?
我正在开发基于 PyQt5 的应用程序。我的 GUI 显示 21 个按钮:从 A 到 Z 的字母,我将它们用作
的输入主要算法。我也希望能够从键盘输入字母。
到目前为止Get printable name of any QKeyEvent key value 我能够做到这一点。
唯一的问题是如何禁用 keyPressevent ,并在我的应用程序介绍屏幕后重新启用它,
就像我用字母按钮做的那样:
self.groupBox.hide()
并在按下开始新游戏后重新启用它们
按钮。 self.groupBox.show()
我在回答中写下了 musicamante 提供的解决我问题的方法。我现在仍然想知道是否有一种方法可以以我的方式禁用 PyQt5 键盘事件处理:
def keyPressEvent(self, event):
print(keyevent_to_string(self, event))
print('self.letters : ',self.letters)
print('self.letters_guessed : ',self.letters_guessed )
if keyevent_to_string(self, event) in self.letters:
print('inininininini'*5)
self.printo(keyevent_to_string(self, event))
代码片段在那里,但当我按下键盘键时没有产生任何结果?
我知道 KeyPressEvent 是 QEvent.KeyPress 的处理程序,所以有没有办法在 Pyqt5 中 disable/delete/remove QEvent.KeyPress class ?
根据 musicamante 的建议,我修改了我的代码:
def keyPressEvent(self, event):
if self.keyonoff:
print(keyevent_to_string(self, event))
print('self.letters : ',self.letters)
print('self.letters_guessed : ',self.letters_guessed )
if keyevent_to_string(self, event) in self.letters:
print('inininininini'*5)
self.printo(keyevent_to_string(self, event))
然后切换
self.keyonoff = True
和 self.keyonoff = False
根据我的代码需要。
我得到了我想要的东西,不确定是否有其他方法 这样做:'I understood that KeyPressEvent is the handler for QEvent.KeyPress, so is there a way to disable/delete/remove QEvent.KeyPress class in Pyqt5 ?'
下面的代码不是我的,只是对我的目的有用的 keyPressEvent 重新植入
from PyQt5.QtCore import Qt
def keyevent_to_string(self, event):
self.keymap = {}
for self.key, value in vars(Qt).items():
if isinstance(value, Qt.Key):
self.keymap[value] = self.key.partition('_')[2]
self.modmap = {
Qt.ControlModifier: self.keymap[Qt.Key_Control],
Qt.AltModifier: self.keymap[Qt.Key_Alt],
Qt.ShiftModifier: self.keymap[Qt.Key_Shift],
Qt.MetaModifier: self.keymap[Qt.Key_Meta],
Qt.GroupSwitchModifier: self.keymap[Qt.Key_AltGr],
Qt.KeypadModifier: self.keymap[Qt.Key_NumLock],
}
self.sequence = []
for modifier, text in self.modmap.items():
if event.modifiers() & modifier:
self.sequence.append(text)
self.key = self.keymap.get(event.key(), event.text())
if self.key not in self.sequence:
self.sequence.append(self.key)
return '+'.join(self.sequence)
来自Get printable name of any QKeyEvent key value
已编辑已编辑已编辑
关于此的更多信息,希望我能获得回问问题的权利:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Fri May 29 10:49:58 2020
@author: Pietro
"""
import sys
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtCore import Qt, QEvent
class Window(QtWidgets.QMainWindow):
def __init__(self):
super(Window, self).__init__()
self.button = QtWidgets.QPushButton("activate", self)
self.button2 = QtWidgets.QPushButton("deactivate", self)
self.button.move(0,0)
self.button2.move(100,100)
self.button2.clicked.connect(self.deactivated)
self.button.clicked.connect(self.activated)
def activated(self):
print('attivato')
QWidget.setEnabled(self,True)
def deactivated(self):
print('deattivato')
QWidget.setEnabled(self,False)
def keyevent_to_string(self, event):
self.keymap = {}
for self.key, value in vars(Qt).items():
if isinstance(value, Qt.Key):
self.keymap[value] = self.key.partition('_')[2]
self.modmap = {
Qt.ControlModifier: self.keymap[Qt.Key_Control],
Qt.AltModifier: self.keymap[Qt.Key_Alt],
Qt.ShiftModifier: self.keymap[Qt.Key_Shift],
Qt.MetaModifier: self.keymap[Qt.Key_Meta],
Qt.GroupSwitchModifier: self.keymap[Qt.Key_AltGr],
Qt.KeypadModifier: self.keymap[Qt.Key_NumLock],
}
self.sequence = []
for modifier, text in self.modmap.items():
if event.modifiers() & modifier:
self.sequence.append(text)
self.key = self.keymap.get(event.key(), event.text())
if self.key not in self.sequence:
self.sequence.append(self.key)
return '+'.join(self.sequence)
def keyPressEvent(self, event):
print(self.keyevent_to_string(event))
if __name__ == '__main__':
app = QApplication(sys.argv)
window = Window()
window.setGeometry(600, 100, 300, 200)
window.show()
sys.exit(app.exec_())
我最终来到这里
QWidget.setEnabled(False)
显然禁用了键盘和鼠标事件。知道如何仅禁用键盘事件吗?