PyQt5 笔记8 – 鼠标、键盘事件


参考博客(鼠标事件)
参考博客(键盘事件)


1、鼠标事件


事件:

  • mousePressEvent (self, event):鼠标键按下事件
  • mouseReleaseEvent (self, event):鼠标键公开事件
  • mouseDoubieCiickEvent (self, event):双击鼠标事件
  • mouseMoveEvent(self,event):鼠标移动事件
  • enterEvent (self, event):鼠标进入控件事件
  • leaveEvent (self, event):鼠标离开控件事件
  • wheelEvent (self, event):滚轮滚动事件

方法:

  • ignore():让父控件继续收到鼠标事件
  • accept():不让父控件继续收到鼠标事件
  • x()、y():返回相对于控件空间的鼠标坐标值
  • pos():返回相对于控件空间的QPoint对象
  • localPos():返回相对于控件空间的QPointF对象
  • globalX()、globalY():返回相对于屏幕的x,y 坐标值
  • globalPos():返回相对于屏幕的QPoint对象
  • windowPos():返回相对于窗口的QPointF对象
  • screenPos():返回相对于屏幕的QPointF对象
  • angleDelta( ):返回QPoint对象,为滚轮转过的数值,单位为1/8度。angleX=event.angleDelta( ) .x(),angleY=event.angleDelta( ) .y()
  • button():返回枚举值,用以判断是哪个鼠标健触发了事件
  • QtCore.Qt.NoButton - 0 - 没有按下鼠标键。例如移动鼠标时的button()返回值
  • QtCore.Qt.LeftButton - 1 - 按下鼠标左键
  • QtCore.Qt.RightButton - 2 - 按下鼠标右键
  • QtCore.Qt.Mion/QtCore.Qt.MiddleButton - 4 -按下鼠标中键
  • buttons():返回前面所列枚举值的组合,用于判断同时按下了哪些键
  • modifiers():判断按下了哪些修饰键(Shift,Ctrl , Alt,等),详见键盘事件的modifiers()
  • timestamp():返回事件发生的时间;

  • mapToGlobal (QPoint):将窗口坐标转换成屏幕坐标
  • mapFromGlobal(QPoint):将屏幕坐标转换成窗口坐标
  • mapToParent(QPoint):将窗口坐标转换成父窗口坐标。如果没有父窗口,则相当于mapToGlobal (QPoint)
  • mapFromParent(QPoint):将父窗口坐标转换成窗口坐标。如果没有父窗口,则相当于mapFromGlobal(QPoint)
  • mapTo (QWidget, QPoint):将窗口坐标转换成 QWidget父窗口坐标
  • mapFrom (QWidget, QPoint):将 QWidget父窗口坐标转换成窗口坐标

  • setCursor(QCursor qcr):参数qcr为QCursor对象或 Qtcore.Qt 类的枚举值,如:ArrowCursor(标准箭头)、upArrowCursor(向上箭头)、 CrossCursor(十字光标)、Waitcursor (沙漏),等等
  • setCursor(QtCore.Qt.WaitCursor)
  • unsetCursor() - 取消设置的鼠标形状
  • cursor() - 返回当前鼠标形状的QCursor对象,使用QApplication类中的以下静态方法来控制整个应用程序的鼠标形状:
    • setOverrideCursor(QCursor qcr):参数qcr为QCursor对象或 Qtcore.Qt 类的枚举值
    • restoreOverrideCursor():取消全局鼠标形状设置,setOverrideCursor()和restoreOverrideCursor( )通常配合使用。
    • changeOverrideCursor(QCursor qcr):将鼠标形状设置为qcr。只有先调用setOverrideCursor( )了,该函数才起作用
    • overrideCursor( ) - 返回当前鼠标形状的QCursor 对象

实例:

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QDialog, QPushButton
from PyQt5.QtCore import QObject, Qt, pyqtSignal# 自定义信号类
class MySignal(QObject):instance = Nonestatus_signal = pyqtSignal(str)@classmethoddef my_signal(cls):if cls.instance:return cls.instanceelse:obj = cls()cls.instance = objreturn cls.instancedef status_emit(self, s):self.status_signal.emit(s)# 自定义按钮类,继承自QPushButton
class MyPushButton(QPushButton):def __init__(self, *args):super(MyPushButton, self).__init__(*args)     # 打开鼠标追踪,如果不打开只有鼠标按下才会同时触发鼠标移到事件self.setMouseTracking(True)# 重写QPushButton中的鼠标移动事件def mouseMoveEvent(self, event):# 触发信号,并携带鼠标位置的字符串MySignal.my_signal().status_emit(str(event.pos().x())+str(event.pos().y()))self.update()class MainWindow(QMainWindow):"""主窗口类"""Status_signal = MySignal.my_signal().status_signaldef __init__(self, *args):super(MainWindow, self).__init__(*args)# 设置主窗口的标题及大小self.setWindowTitle('主窗口')self.resize(400, 300)# 使自定义的按钮类来实例化按钮self.btn = MyPushButton(self)self.btn.setText('自定义按钮')self.btn.move(50, 50)self.btn.clicked.connect(self.show_dialog)# 自定义信号绑定self.Status_signal.connect(self.show_status)# 在状态栏中显示字符串def show_status(self, s):self.statusBar().showMessage(s)if __name__ == '__main__':app = QApplication(sys.argv)demo = MainWindow()demo.show()sys.exit(app.exec())


2、键盘事件


事件:

  • keyPressEvent(self, event):键盘按下事件
  • focusInEvent(self, event):获得焦点事件
  • focusOutEvent(self,even):失去焦点事件

方法:

  • setFocus([reason]) - 如果控件在活动窗口中,调用此方法后,该控件成为输入焦点。reason参数可为QtCore.Qt类中的以下枚举变量:

    • MouseFocusReason(0):使用鼠标获得焦点;
    • TabFocusReason(1):按下了Tab键
    • BacktabFocusReason(2):按下了组合键
    • ActiveWindowFocusReason(3):窗口变为活动和非活动
    • PopupFocusReason(4):打开或关闭弹出窗口
    • ShortcutFocusReason(5):按下快捷键
    • MenuBarFocusReason(6):通过菜单操作
    • OtherFocusReaaon(7):其他方式
  • clearFocus():去除输入焦点
  • hasFocus():如果控件是输入焦点,返回True;否则,返回False;

实例:

# 重写键盘按下事件
def keyPressEvent(self, event):# 如果按下xxx则xxxif event.key() == Qt.Key_Home:print('Home')# 组合键elif (event.key() == Qt.Key_P):if QApplication.keyboardModifiers() == Qt.ShiftModifier:print('shift + p')else :print('p')else:QWidget.keyPressEvent(self, event)

PyQt5 笔记8 -- 鼠标、键盘事件相关推荐

  1. Python - selenium_WebDriver 鼠标键盘事件

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

  2. java 模拟鼠标键盘_使用SWT模拟鼠标键盘事件

    二.使用SWT中的鼠标键盘事件 在SWT的snippets中有两个例子用来介绍这两个方法的使用,如下: (1).模拟鼠标事件 * UI Automation (for testing tools) s ...

  3. Linux 模拟 鼠标 键盘 事件

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

  4. c++ 读文件_第十六节:读文件,文件的创建,写文件,文件的读写以及鼠标键盘事件和图形绘制...

    读文件 //读文件 文件的创建 public 写文件 public 文件的读写 重点: 文件类主要功能:创建,读属性,写属性,删除等 文件读写操作 File类 File类的对象 用来获取文件本身的信息 ...

  5. C#使用LibVLC实现播放遇到无法全屏及鼠标键盘事件问题解决

    最近开发视频播放软件使用VLC实现流媒体播放,在使用libVLC自己进行集成播放控件时发现,播放窗口picturebox不响应鼠标键盘事件,无法进行双击或鼠标全屏播放功能的实现.原因是事件被vlc s ...

  6. python pyhook监听扫码_Python——pyHook监听鼠标键盘事件

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

  7. Selenium 利用 JS/JQ 操作元素、鼠标键盘事件、Cookie 操作

    今天是持续写作的第 26 / 100 天. 如果你有想要交流的想法.技术,欢迎在评论区留言. 本篇博客主要学习 Selenium 中如何利用 JavaScript 与 JQuery 操作页面元素,以及 ...

  8. Javascript鼠标键盘事件

    鼠标事件 click:单击 dblclick:双击 mousedown:鼠标按下 mouseup:鼠标抬起 mouseover:鼠标悬浮 mouseout:鼠标离开 mousemove:鼠标移动 mo ...

  9. python+webdriver学习鼠标键盘事件以及定位元素

    设置浏览器大小:像素点 set_window_size(width,height) maximize_window() 浏览器全屏显示,不带参数 控制浏览器前进.后退: driver.forward( ...

最新文章

  1. 学习python的日常6
  2. php和python对比-PHP、Python和Javascript的装饰器模式对比
  3. python学习笔记-5.18
  4. 64MQQ2440烧写MINI2440光盘中的内容同样可以跑起来
  5. 农历控件源码(C#)
  6. B12-UIAlertController(NS_CLASS_AVAILABLE_IOS(8_0))。
  7. dockerhub 拉取地址_DockerHub 镜像仓库的使用详解
  8. 用函数实现simulink_VCU/BMS基于模型的开发---Simulink 代码集成
  9. javascript等待异步线程完成_前端:什么是单线程,同步,异步?彻底弄懂 JavaScript 执行机制...
  10. “新基建”横空出世,9本书助你把握7+2大领域风口
  11. filebeat 解析日志 并发送到Elasticsearch
  12. 转子接地保护原理_发电机转子一点接地:保护原理、整定方法、动作后果
  13. Android——Android Studio导入SlidingMenu类库的方法
  14. 单链表的插入删除以及逆转
  15. 蔚来汽车提交IPO招股书:三年亏百亿,腾讯为大股东
  16. SVN源码服务器搭建-详细教程(我的收藏)
  17. 超期天数计算机函数公式大全,Excel计算天数的函数与公式总结
  18. 别拿学历说事,这些天王中学没毕业,最低的是成龙
  19. c语言求50以内阶乘,C语言之数组50以内的阶乘.doc
  20. google play aab上传PAD的使用流程

热门文章

  1. Android APP的创意
  2. AD8609ARUZ 精密四路微功耗轨对轨输入/输出放大器 、 线性放大器仪表、运算放大器、缓冲放大器
  3. 前女友被腾讯挖走的那晚,我帮她...
  4. 【APICloud系列|2】上架安卓应用商店全套流程(小米应用商店、华为应用市场、阿里应用商店、百度手机助手、腾讯应用宝)
  5. Mac系统应该用什么软件进行清理?
  6. 计算机内存不足黑屏怎么办,只狼影逝二度游戏黑屏闪退内存不足解决方法推荐...
  7. 快乐学习!Python趣味练手项目:PyQ5模块实现通过中文名字识别性别
  8. Node.js和Vue
  9. php人群定向搜索,搜索人群定向功能
  10. Vue+Element 项目实战(一)