【PyQt5-Qt Designer】鼠标+键盘事件

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

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

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()

完整代码:

 1 from PyQt5.QtCore import Qt
 2 from PyQt5.QtGui import (QPainter, QColor, QPen)
 3 import sys
 4 from PyQt5.QtWidgets import (QApplication,QWidget,QLabel)
 5
 6 class Example(QWidget):
 7     def __init__(self):
 8         super(Example, self).__init__()
 9         self.initUi()
10         #默认情况下禁用鼠标跟踪, 如果启用鼠标跟踪,即使没有按钮被按下,小部件也会接收鼠标移动事件。
11         #当然你也可以不写,只需要在执行的过程中按照鼠标左键也行
12         self.setMouseTracking(True)
13
14     def initUi(self):
15         self.setGeometry(400,300,400,300)
16         self.setWindowTitle("键盘响应事件")
17         self.lab1 = QLabel("方向",self)
18         self.lab1.setGeometry(200,150,100,100)
19         self.lab2 = QLabel("显示鼠标坐标", self)
20         self.lab2.setGeometry(200, 80, 100, 100)
21
22     """重定义键盘事件"""
23     def keyPressEvent(self,e ):
24         if e.key() == Qt.Key_Up:
25             self.lab1.setText("↑")
26         elif e.key() == Qt.Key_Down:
27             self.lab1.setText("↓")
28         elif e.key() == Qt.Key_Left:
29             self.lab1.setText("←")
30         else:
31             self.lab1.setText("→")
32
33     """重定义鼠标单击事件"""
34     def mousePressEvent(self, event):
35         if event.button() == Qt.LeftButton:
36             self.lab1.setText("鼠标左键点击!")
37             # print(event.pos().x(),event.pos().y())
38         if event.button() == Qt.RightButton:
39             self.lab1.setText("鼠标右键点击!")
40
41     """当鼠标左键点击拖动时触发事件,有无if判断条件效果都一样"""
42     def mouseMoveEvent(self, event):
43         # if event.buttons() == Qt.LeftButton:
44         #     # print(type(event.pos().x()))    #<class ‘int‘>
45         #     self.lab2.setText(str(event.pos().x())+","+str(event.pos().y()))
46         self.pos = event.pos()
47         print(self.pos)
48         self.lab2.setText(str(event.pos().x()) + "," + str(event.pos().y()))
49         self.update()
50
51
52
53 if __name__ == ‘__main__‘:
54     app = QApplication(sys.argv)
55     ex = Example()
56     ex.show()
57     sys.exit(app.exec_())

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

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

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

原文地址:https://www.cnblogs.com/XJT2018/p/10180832.html

时间: 2024-10-09 04:39:17

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

Python - selenium_WebDriver 鼠标键盘事件

from selenium import webdriver #引入ActionChains类 提供了鼠标的操作方法 from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.common.keys import Keys from ReadTxt_demo import readTxt import time #鼠标键盘事件 ''' ActionChains 常用方法 per

Linux 模拟 鼠标 键盘 事件

/************************************************************************ * Linux 模拟 鼠标 键盘 事件 * 说明: * 以前看到有些软件能够控制鼠标移动,键盘操作等功能,总想知道这些到底 * 是怎么做到的,好像是2年前也尝试去做这件事,但那时候对知识的匮乏直接导致 * 无法进行,早上突然想到这件事,于是又搜索了一下,鉴于目前经常接触Linux * 驱动,对这些东西的理解也就很容易. * * 2016-2-27 深

selenium鼠标键盘事件(转)

概念 在使用 Selenium WebDriver 做自动化测试的时候,会经常模拟鼠标和键盘的一些行为.比如使用鼠标单击.双击.右击.拖拽等动作:或者键盘输入.快捷键使用.组合键使用等模拟键盘的操作.在 WebDeriver 中,有一个专门的类来负责实现这些测试场景,那就是 Actions 类,在使用该类的过程中会配合使用到 Keys 枚举以及 Mouse. Keyboard.CompositeAction 等类. 其次,在实际测试过程中,可能会遇到某些按键没办法使用 Actions.Keys

Selenese 命令清单 - 鼠标键盘事件控制命令

点击链接加入群[悦分享测试联盟]:https://jq.qq.com/?_wv=1027&k=5DiePik 简介 Selenium为用户提供了大量的Selenese命令,可以非常方便的为用户编写脚本实用,其中实际场景运用需要的并不多,为了能更好的利用这些命令,我对几乎所有Selenese命令做了分类,分类内容如下: 包含操作页面元素常用命令,以及一些不常用到的高级使用命令 对鼠标键盘事件控制命令 wait相关命令 veriy相关命令 assert相关命令 store存储器相关命令 Part I

做UI最全的鼠标键盘事件!

在使用 Selenium WebDriver 做自动化测试的时候,会经常模拟鼠标和键盘的一些行为.比如使用鼠标单击.双击.右击.拖拽等动作:或者键盘输入.快捷键使用.组合键使用等模拟键盘的操作.在 WebDeriver 中,有一个专门的类来负责实现这些测试场景,那就是ActionChains类,在使用该类做键盘操作的过程中会配合使用到 Keys 数据存储类,Keys包含键盘上所有特殊按键. 一.鼠标点击操作 click(element=None)左击context_click(element=N

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

Qt键盘事件属于Qt事件系统,所以事件系统中所有规则对按键事件都有效.下面关注点在按键特有的部分: focus 一个拥有焦点(focus)的QWidget才可以接受键盘事件.有输入焦点的窗口是活动窗口或活动窗口子窗口或子子窗口等. 焦点移动的方式有以下几种: 按下Tab或Shift+Tab 注意:文本编译器(一般需要插入Tab),或者WebView(需要Tab来移动超链接焦点) 等 Qt中,需要输入Tab的地方可以用 Ctrl+Tab 或 Ctrl+Shift+Tab 替代. 点击一个QWidg

java GUI(鼠标键盘事件)

/* * */ import java.awt.*; import java.awt.event.*; public class MouseAndEvent { private Frame f; private Button but; private TextField tf; MouseAndEvent() { init(); } //对图形化界面进行初始化. public void init() { f=new Frame("my frame"); //对frame进行基本设置,该

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

写在前面 最近公司在搞浏览器兼容的事情,所有浏览器兼容的问题不得不一个人包了.下面来说一下今天遇到的一个问题吧 大家都知道IE下面如果要获得剪贴板里面的信息的话,代码应该如下所示 window.clipboardData.getData("Text") 可是在chrome下面就行不通了,chrome下面没有类似ie的这种方法,那应该怎么办呢,百度了一下,发现还真有办法. 只要在HTML界面上放上一个text类型的控件,如下所示 <textarea id="textAre

自动化测试基础篇--Selenium鼠标键盘事件

前面几篇文章我们学习了怎么定位元素,同时通过实例也展示了怎么切换到iframe,怎么输入用户名和密码,怎么点击登录按钮,首先我们先回顾一下元素的基本操作. 1.点击(鼠标左键)页面按钮:click() 2.请空输入框:clear() 3.输入字符串:send_keys() 4.提交表单:submit() 今天这篇文章着重讲一下键盘和鼠标的模拟事件. 一.鼠标事件 1.首先模拟鼠标的操作需要先导入鼠标模块: from selenium.webdriver.common.action_chains