PySide2中键盘事件无效的原因及解决方法

监听键盘无效的原因

我在照例子学习的过程中遇到了键盘事件无效的情况,比如

from PySide2.QtWidgets import *
from PySide2.QtCore import Qt

class Example(QWidget):
    def __init__(self):
        self.initUI()        
    def initUI(self):
        self.window = QMainWindow()
        self.window.resize(200, 100)        
        self.window.setWindowTitle('窗口')
        self.textEdit = QLineEdit(self.window)
        self.textEdit.setPlaceholderText("按回车试试")
        self.textEdit.move(50, 30)
        self.window.show()
    # 这里定义了键盘监听事件,然并卵,根本没有执行
    def keyPressEvent(self, event):
        if event.key() == Qt.Key_Return:
            print('按下回车')

if __name__ == '__main__':
    app = QApplication()
    window = Example()
    app.exec_()

通过排查发现,keyPressEvent 只监听主窗体,你要是在上面加个输入框之类的,它就不鸟你了。肯定可以把这个函数和控件结合起来,只不过我还不会。

解决方法一:QLineEdit自带的信号

QLineEdit自带了一个信号 returnPressed
代码可以改为:

from PySide2.QtWidgets import *
from PySide2.QtCore import Qt

class Example(QWidget):
    def __init__(self):
        self.initUI()
        # 用returnPressed信号来监听
        self.textEdit.returnPressed.connect(self.keypress)
    def initUI(self):
        self.window = QMainWindow()
        self.window.resize(200, 150)
        self.window.setWindowTitle('窗口')
        self.textEdit = QLineEdit(self.window)
        self.textEdit.setPlaceholderText("按回车试试")
        self.textEdit.move(50, 30)
        self.textEdit2 = QLineEdit(self.window)
        self.textEdit2.setPlaceholderText("按回车试试")
        self.textEdit2.move(50, 70)
        self.window.show()
    def keypress(self):
        print('你按了一下回车')

if __name__ == '__main__':
    app = QApplication()
    window = Example()
    app.exec_()

解决方法二:事件过滤器

事件过滤器似乎值得好好研究一下,目前我知道的用法是现在控件上installEventFilter,然后在下面写个eventFilter(self, widget, event)函数

from PySide2.QtWidgets import *
from PySide2.QtCore import Qt, QEvent

class Example(QWidget):
    def __init__(self):
        super(Example, self).__init__() # 这里要这么写,我也不知道为什么       
        self.initUI()
        self.textEdit.installEventFilter(self) # 相当于绑定了事件过滤器
    def initUI(self):
        self.window = QMainWindow()
        self.window.resize(200, 150)
        self.window.setWindowTitle('窗口')
        self.textEdit = QLineEdit(self.window)
        self.textEdit.setPlaceholderText("按回车试试")
        self.textEdit.move(50, 30)
        self.textEdit2 = QLineEdit(self.window)
        self.textEdit2.setPlaceholderText("按回车试试")
        self.textEdit2.move(50, 70)
        self.window.show()
    def eventFilter(self, widget, event): # 定义事件过滤器
        if event.type() == QEvent.KeyPress: # 先判断事件类型是否是键盘事件
            if event.key() == Qt.Key_Return: # 再判断是否是回车
                print('你按了一下回车')
        # 这里要return,要不然会报错
        return QWidget.eventFilter(self, widget, event)

if __name__ == '__main__':
    app = QApplication()
    window = Example()
    app.exec_()

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: PySide2是Qt公司推出的一个Python绑定库,它提供了许多与Qt C++框架相对应的类、函数和方法PySide2文手册是一份详细的文档,旨在帮助开发者了解和使用PySide2库。 PySide2文手册包含了PySide2库的各种功能和特性的详细介绍。它涵盖了Qt的各个模块,包括核心模块、GUI模块、网络模块、数据库模块等。手册提供了对每个模块类、函数和方法的解释,以及它们的用法和示例代码。此外,手册还包含了一些常见问题的解答和编程技巧,帮助开发者更好地使用PySide2解决实际问题。 对于开发者来说,PySide2文手册是一份重要的参考资料。它能够帮助开发者快速了解PySide2库的各个方面,方便他们在开发过程进行调试和优化。手册的文版更便于国内开发者的阅读和理解,减少了由于语言差异带来的理解障碍,提高了学习效率和开发效率。 总之,PySide2文手册是一份重要的文档资源,它为开发者提供了详细的PySide2库的介绍和使用方法。开发者可以通过阅读手册了解PySide2的各个模块和功能,提高开发效率,更好地使用PySide2实现自己的应用程序。 ### 回答2: Pyside2文手册是指Pyside2的官方文档或教程的文版本。Pyside2是一个用于创建跨平台Python GUI应用程序的库,它是Qt的Python绑定版本,使得开发者能够使用Python语言来开发GUI界面。Pyside2文手册的目的是帮助文用户更好地学习和使用Pyside2Pyside2文手册通常包含了Pyside2库的详细介绍、使用教程、示例代码和API文档等内容。它可以帮助新手了解Pyside2的基本概念和原理,帮助他们快速入门并开始开发自己的GUI应用程序。对于有经验的开发者来说,Pyside2文手册也提供了一些高级功能的深入讲解和最佳实践,帮助他们提升开发效率和代码质量。 Pyside2文手册的编写通常需要一些经验丰富的开发者和专业翻译人员共同合作完成。他们会根据Pyside2官方文档进行翻译,并根据文用户的需求和反馈进行补充和改进。这样的努力可以确保Pyside2文手册既准确地表达了原文的意思,又适应了文用户的使用习惯和理解方式。 总之,Pyside2文手册是一个对Pyside2库的文解读和说明,它可以帮助文用户更好地学习和使用Pyside2,提高开发效率,开发出优质的GUI应用程序。 ### 回答3: Pyside2是一种用于创建跨平台桌面应用程序的Python绑定库。为了方便使用,Pyside2提供了详细的文手册,帮助开发者更好地了解和掌握Pyside2的使用方法。 这个文手册涵盖了Pyside2的各个模块、类和函数的详细说明,并提供了大量的示例代码和使用技巧。开发者可以通过手册了解如何使用Pyside2创建窗口、设计界面、处理用户交互、处理事件等等。手册还包含了Pyside2常用控件的使用方法,例如按钮、标签、文本框、下拉框等,以及高级功能的讲解,例如图表绘制、文件操作和多线程处理等。 使用Pyside2文手册,开发者可以快速入门Pyside2,并快速上手开发桌面应用程序。手册的结构清晰,内容全面,给出了许多实用的示例代码,开发者可以通过阅读手册了解Pyside2的基本概念和使用技巧,并通过实际的代码实现来巩固学习。 总之,Pyside2文手册为开发者提供了一个全面、详细的学习和参考指南,帮助他们更好地掌握Pyside2的开发技巧和应用方法。无论是初学者还是有经验的开发者,都可以通过阅读手册提高自己的Pyside2技能,从而更高效地进行桌面应用程序开发。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值