用PyQt5做一个模拟键盘,我想让它失去焦点的时候按下按键仍能显示键盘键位
应该怎么做呢?现在一点击这个软件的外部就失效了
用PyQt5做一个模拟键盘,我想让它失去焦点的时候按下按键仍能显示键盘键位
对于优化后的问题,我建议可以给模拟键盘组件添加失去焦点仍能显示键盘键位的功能,同时解决点击模拟键盘外部时软件失效的问题。具体操作如下:
class MyKeyboard(QWidget):
def __init__(self):
super().__init__()
self.key_pressed = None
# 重写focusOutEvent函数,保存当前按键位的信息
def focusOutEvent(self, event):
self.key_pressed = None
super().focusOutEvent(event)
# 重写keyPressEvent函数,记录当前按键位的信息
def keyPressEvent(self, event):
key = event.key()
self.key_pressed = key
super().keyPressEvent(event)
# 重写paintEvent函数,显示按键位的信息
def paintEvent(self, event):
painter = QPainter(self)
painter.setPen(QPen(Qt.black))
painter.setFont(QFont('Arial', 12))
if self.key_pressed is not None:
key_text = QKeySequence(self.key_pressed).toString()
painter.drawText(self.rect(), Qt.AlignCenter, key_text)
class MainWindow(QMainWindow):
def __init__(self):
...
self.keyboard = MyKeyboard()
self.setCentralWidget(self.keyboard)
# 重写mousePressEvent函数,判断是否在模拟键盘的区域内,若不在则将焦点转移至主窗口
def mousePressEvent(self, event):
if not self.keyboard.rect().contains(event.pos()):
self.setFocus()
super().mousePressEvent(event)
通过以上操作,就可以实现在失去焦点后仍能显示键盘键位的模拟键盘功能,并解决点击模拟键盘外部时软件失效的问题。