喜欢乃琳之睡觉大魔王 2023-05-02 16:51 采纳率: 0%
浏览 16

如何用PyQt5做一个模拟键盘,我想让它失去焦点的时候按下按键仍能显示键盘键位?

用PyQt5做一个模拟键盘,我想让它失去焦点的时候按下按键仍能显示键盘键位

img


应该怎么做呢?现在一点击这个软件的外部就失效了

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-05-04 16:26
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:

    • 以下回答来自chatgpt:

      对于优化后的问题,我建议可以给模拟键盘组件添加失去焦点仍能显示键盘键位的功能,同时解决点击模拟键盘外部时软件失效的问题。具体操作如下:

      1. 对于模拟键盘组件,考虑重写其focusOutEvent函数,使其在失去焦点后仍能保留当前按键位的信息。代码示例如下:
      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)
      
      1. 为了防止在点击模拟键盘外部时导致软件失效,可以在主界面中监听鼠标事件,当发现鼠标点击事件不在模拟键盘的区域内时,将焦点转移至主窗口。代码示例如下:
      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)
      

      通过以上操作,就可以实现在失去焦点后仍能显示键盘键位的模拟键盘功能,并解决点击模拟键盘外部时软件失效的问题。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 5月2日

悬赏问题

  • ¥15 无法输出helloworld
  • ¥15 高通uboot 打印ubi init err 22
  • ¥20 PDF元数据中的XMP媒体管理属性
  • ¥15 R语言中lasso回归报错
  • ¥15 网站突然不能访问了,上午还好好的
  • ¥15 有没有dl可以帮弄”我去图书馆”秒选道具和积分
  • ¥15 semrush,SEO,内嵌网站,api
  • ¥15 Stata:为什么reghdfe后的因变量没有被发现识别啊
  • ¥15 振荡电路,ADS仿真
  • ¥15 关于#c语言#的问题,请各位专家解答!