zoukankan      html  css  js  c++  java
  • 【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

  • 相关阅读:
    Codeforces Round #696 (Div. 2) A
    软件体系结构期末复习
    LINUX 下配置 redis
    2020-09-30 刷题记录
    2020-09-29 刷题记录
    Codeforces Round #673 (Div. 2) A
    2020-09-26 刷题记录
    2020-09-25 刷题记录
    C++ 类虚函数实现原理的验证(指向包含类虚函数地址的数组的指针)
    Saleae8 与 SaleaeLogic、PulseView上位机的使用
  • 原文地址:https://www.cnblogs.com/XJT2018/p/10180832.html
Copyright © 2011-2022 走看看