iT邦幫忙

0

【PySide6】事件(Event)_滑鼠事件

  • 分享至 

  • xImage
  •  

本文主要是了解視窗滑鼠事件

程式碼:form_mouse_event.py

"""
程式名稱:form_mouse_event.py
程式功能:
1. 視窗滑鼠事件了解
"""
import sys

from PySide6.QtCore import Qt
from PySide6.QtWidgets import (
    QWidget, QApplication)

class MyApp(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle('form_mouse_event.py')
        self.setGeometry(100, 100, 500, 300)
        #self.setMouseTracking(True)
        self.show()

    def leaveEvent(self, event):
        print('leaveEvent')

    def enterEvent(self, event):
        print('enterEvent')

    def mouseDoubleClickEvent(self, event):
        print('mouseDoubleClickEvent')

    def mousePressEvent(self, event):
        btn_event = event.button()
        match btn_event:
            case Qt.MouseButton.LeftButton:
                print('按了左鍵')
            case Qt.MouseButton.RightButton:
                print('按了右鍵')
            case Qt.MouseButton.MiddleButton:
                print('按了中鍵(滾輪)')
            case _:
                # 如電競滑鼠或其它側邊也有按鈕的滑鼠...
                # 因手邊沒有相關滑鼠,
                # 可能是Qt.MouseButton.ExtraButton(x),x為數字,
                # 要測試才知道。
                print('按了滑鼠三鍵外的其它鍵')

    def mouseMoveEvent(self, event):
        print('mouseMoveEvent')

    def mouseReleaseEvent(self, event):
        print('mouseReleaseEvent')

    def wheelEvent(self, event):
        print('wheelEvent')

if __name__ == '__main__':
    app = QApplication()
    my_app = MyApp()

    sys.exit(app.exec())

滑鼠移至視窗

enterEvent

滑鼠離開視窗

leaveEvent

說明:

所謂視窗區是指藍色區塊的區域。
https://ithelp.ithome.com.tw/upload/images/20240321/201659431TBuU3VieX.png

滾輪滾動

只要滾動滾輪,會一直觸發wheelEvent

滑鼠按鍵按下

在此以按滑鼠右鍵示範

按了右鍵(mousePressEvent)
mouseReleaseEvent

滑鼠按鍵雙按

在此以按滑鼠左鍵示範

按了左鍵(mousePressEvent)
mouseReleaseEvent
mouseDoubleClickEvent
mouseReleaseEvent

說明:
那如何得知是按了哪個按鍵呢?
這時就要使用到PySide6.QtCore.Qt模組所提供的MouseButton列舉(enum)

註:至於列舉有哪些,可以參考連結:
PySide6.QtCore.Qt.MouseButton

於mousePressEvent事件,取出event.button()的值,在此判斷是否為滑鼠常用的三個按鍵,判斷LeftButton、RighttButton、MiddleButton三個列舉值來進行列印輸出。

在這邊學習到一直期望很久的switch-case語法,在python語法為match-case(為何要跟其它語言不一樣,XD~)。這語法要Python 3.10後才有。

其語法中,default的表示在Python中要用case _來表示。

滑鼠移動

當設定self.setMouseTracking(True)時,只要滑鼠在視窗移動,就會一直觸發mouseMoveEvent

當設定self.setMouseTracking(False)或預設(沒設定)時,滑鼠按下按鍵,移動滑鼠後才會觸發mouseMoveEvent,因為有按了按鍵,故也會有mousePressEvent、mouseReleaseEvent事件。


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言