重定义鼠标响应+键盘响应事件

一,每个事件都被封装成相应的类:

pyqt中,每个事件类型都被封装成相应的事件类,如鼠标事件为QMouseEvent,键盘事件为QKeyEvent等。而它们的基类是QEvent。

二,基类QEvent的几个重要方法:

accept() 表示事件已处理,不需要向父窗口传播

ignore()表示事件未处理,继续向父窗口传播f

type()返回事件类型,如QtCore.QEvent.MouseButtonPress,一般由基事件调用。因为其它事件已经知道自己的事件类型了。

还有一个自定义事件的注册方法。

三,QMouseEvent鼠标事件:

buttons()  返回哪个鼠标按键被按住了。如Qt.LeftButton

globalPos()  返回鼠标相对屏幕的位置QPoint

pos()  返回鼠标相对处理事件的窗口的位置

四、处理鼠标事件的响应函数(在QWidget及其继承类中):

mousePressEvent(QMouseEvent)  #鼠标点击触发事件  

mouseReleaseEvent(event)  #鼠标释放触发事件

mouseMoveEvent(event)  #鼠标移动触发事件

# 事件。
"""重写鼠标事件,实现窗口拖动。"""
def mousePressEvent(self, event):
if event.buttons() == Qt.LeftButton:
self.setCursor(Qt.OpenHandCursor)
self.parent.m_drag = True
self.parent.m_DragPosition = event.globalPos()-self.parent.pos()
event.accept() def mouseMoveEvent(self, event):
try:
if event.buttons() and Qt.LeftButton:
self.parent.move(event.globalPos()-self.parent.m_DragPosition)#move将窗口移动到指定位置
event.accept()
except AttributeError:
pass def mouseReleaseEvent(self, event): if event.button()==Qt.LeftButton:
self.m_drag = False
self.unsetCursor()

效果如下:

重新定义鼠标事件:

"""重定义鼠标单击事件"""
def mousePressEvent(self, event):
if event.button() == Qt.LeftButton:
self.lab1.setText("鼠标左键点击!")
# print(event.pos().x(),event.pos().y())
if event.button() == Qt.RightButton:
self.lab1.setText("鼠标右键点击!") """当鼠标左键点击拖动时触发事件,有无if判断条件效果都一样"""
def mouseMoveEvent(self, event):
# if event.buttons() == Qt.LeftButton:
# # print(type(event.pos().x())) #<class 'int'>
# self.lab2.setText(str(event.pos().x())+","+str(event.pos().y()))
self.pos = event.pos()
print(self.pos)
self.lab2.setText(str(event.pos().x()) + "," + str(event.pos().y()))
self.update()

完整代码:

 from PyQt5.QtCore import Qt
from PyQt5.QtGui import (QPainter, QColor, QPen)
import sys
from PyQt5.QtWidgets import (QApplication,QWidget,QLabel) class Example(QWidget):
def __init__(self):
super(Example, self).__init__()
self.initUi()
#默认情况下禁用鼠标跟踪, 如果启用鼠标跟踪,即使没有按钮被按下,小部件也会接收鼠标移动事件。
#当然你也可以不写,只需要在执行的过程中按照鼠标左键也行
self.setMouseTracking(True) def initUi(self):
self.setGeometry(400,300,400,300)
self.setWindowTitle("键盘响应事件")
self.lab1 = QLabel("方向",self)
self.lab1.setGeometry(200,150,100,100)
self.lab2 = QLabel("显示鼠标坐标", self)
self.lab2.setGeometry(200, 80, 100, 100) """重定义键盘事件"""
def keyPressEvent(self,e ):
if e.key() == Qt.Key_Up:
self.lab1.setText("↑")
elif e.key() == Qt.Key_Down:
self.lab1.setText("↓")
elif e.key() == Qt.Key_Left:
self.lab1.setText("←")
else:
self.lab1.setText("→") """重定义鼠标单击事件"""
def mousePressEvent(self, event):
if event.button() == Qt.LeftButton:
self.lab1.setText("鼠标左键点击!")
# print(event.pos().x(),event.pos().y())
if event.button() == Qt.RightButton:
self.lab1.setText("鼠标右键点击!") """当鼠标左键点击拖动时触发事件,有无if判断条件效果都一样"""
def mouseMoveEvent(self, event):
# if event.buttons() == Qt.LeftButton:
# # print(type(event.pos().x())) #<class 'int'>
# self.lab2.setText(str(event.pos().x())+","+str(event.pos().y()))
self.pos = event.pos()
print(self.pos)
self.lab2.setText(str(event.pos().x()) + "," + str(event.pos().y()))
self.update() if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
ex.show()
sys.exit(app.exec_())

重定义鼠标响应+键盘响应

所有的QT键盘事件代码如下:

https://pan.baidu.com/s/1Brry6fkUcxaP-uOdukD8Ng

【PyQt5-Qt Designer】鼠标+键盘事件的更多相关文章

  1. QT 11 鼠标键盘事件添加

    鼠标事件 void mousePressEvent(QMouseEvent *event); //单击 void mouseReleaseEvent(QMouseEvent *event); //释放 ...

  2. 【转】Qt鼠标键盘事件

    http://blog.csdn.net/lovebird_27/article/details/50351336 Qt 程序需要在main()函数创建一个QCoreApplication对象,然后调 ...

  3. Linux 模拟 鼠标 键盘 事件

    /************************************************************************ * Linux 模拟 鼠标 键盘 事件 * 说明: ...

  4. Python——pyHook监听鼠标键盘事件

    pyHook包为Windows中的全局鼠标和键盘事件提供回调. 底层C库报告的信息包括事件的时间,事件发生的窗口名称,事件的值,任何键盘修饰符等. 而正常工作需要pythoncom等操作系统的API的 ...

  5. Python - selenium_WebDriver 鼠标键盘事件

    from selenium import webdriver #引入ActionChains类 提供了鼠标的操作方法 from selenium.webdriver.common.action_cha ...

  6. Tkinter 鼠标键盘事件(一)

    一: 鼠标事件 <Button-1>                                                                     鼠标左键单击 ...

  7. Selenium4.0+Python3系列(四) - 常见元素操作(含鼠标键盘事件)

    一.写在前面 上篇文章介绍的是关于浏览器的常见操作,接下来,我们将继续分享关于元素的常见操作,建议收藏.转发! 二.元素的状态 在操作元素之前,我们需要了解元素的常见状态. 1.常见元素状态判断,傻傻 ...

  8. Qt中的键盘事件,以及焦点的设置(比较详细)

    Qt键盘事件属于Qt事件系统,所以事件系统中所有规则对按键事件都有效.下面关注点在按键特有的部分: focus 一个拥有焦点(focus)的QWidget才可以接受键盘事件.有输入焦点的窗口是活动窗口 ...

  9. 由chrome剪贴板问题研究到了js模拟鼠标键盘事件

    写在前面 最近公司在搞浏览器兼容的事情,所有浏览器兼容的问题不得不一个人包了.下面来说一下今天遇到的一个问题吧 大家都知道IE下面如果要获得剪贴板里面的信息的话,代码应该如下所示 window.cli ...

随机推荐

  1. WebMisSharp升级说明,最新版本1.6.0

    尊敬的C3 AM.C3 FX.WebMisSharp用户您好: 非常感谢长期来您对WebMisSharp系列产品的支持,您的使用和反馈是我们进步的最大动力.在你们的帮助下我们又向前迈进了一步,我们功能 ...

  2. Unity5 AssetBundle系列——基本流程

    Unity5的AssetBundle修改比较大,所以第一条建议是:忘掉以前的用法,重新来!要知道,Unity5已经没办法加载2.x 3.x的bundle包了…体会一下Unity5 AssetBundl ...

  3. Java知多少(75)Object类

    Object 类位于 java.lang 包中,是所有 Java 类的祖先,Java 中的每个类都由它扩展而来. 定义Java类时如果没有显示的指明父类,那么就默认继承了 Object 类.例如: p ...

  4. token令牌和jwt

    用户登录,后端生成token返回给前端 前端拿到token,以后每次登录使用header里的token进行权限验证 后端接收到前端传来的token,如果是通过数据库或redis或session进行比对 ...

  5. 关于Unity中NGUI的Tab商城、Scrollview和打字机效果的实现

    Tab商城实例 UIToggle 和 UIToggledObjects+ Box Collider(实现商城功能必备) 1.创建两个个UI Sprite,Sprite1和Sprite2 2.给Spri ...

  6. 一起了解下Centos中‘vim配置’有多强大?

    在linux的系统上安装vim编辑器后,发现vim的页面设置还是不太习惯,没有显示的行号,也没有自动的缩进,页面的背景也不是很好看,但是vim编辑器是可以进行配置的,我们可以打造属于自己的vim风格. ...

  7. [Algorithm] *String Matching and Hashing

    Link: Computer Algorithms: Rabin-Karp String Searching 为了避免挨个字符对文本和模式串进行比较,我们可以尝试一次性判断两者是否相等. 因此,我们需 ...

  8. 使用LevelListDrawable实现Html.fromHtml多张图片显示

    stackoverflow网站果然强大,帮了我不少忙! http://stackoverflow.com/questions/16179285/html-imagegetter-textview 首先 ...

  9. iPhone 上你可能还不知道的小技巧

    用了这么久的 iPhone,这些技巧你可能都还不知道哦. 1.怎么用耳机切歌? 将耳机的话筒部位的中间(平时暂停用的,按一下)连按两下 即可. 连按两下,下一首. 连按三下,上一首. 2.摇一摇,相当 ...

  10. Spring Boot 集成 Redis 实现缓存机制

    本文章牵涉到的技术点比较多:spring Data JPA.Redis.Spring MVC,Spirng Cache,所以在看这篇文章的时候,需要对以上这些技术点有一定的了解或者也可以先看看这篇文章 ...