欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

PyQt6?鍵盤事件處理的實現(xiàn)及實例代碼

 更新時間:2025年09月24日 11:10:44   作者:小灰灰搞電子  
本文主要介紹了PyQt6?鍵盤事件處理的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

一、鍵盤事件處理詳解

在 PyQt6 中,鍵盤事件處理是 GUI 開發(fā)的核心功能之一,通過重寫特定事件處理器實現(xiàn)。以下是關(guān)鍵要點和完整實現(xiàn)方案:

1、核心事件處理器

按鍵按下事件
重寫 keyPressEvent 方法處理按鍵動作:

def keyPressEvent(self, event):
    key = event.key()  # 獲取按鍵編碼
    if key == Qt.Key.Key_A:  # 檢測特定按鍵
        print("A鍵被按下")

按鍵釋放事件
重寫 keyReleaseEvent 處理釋放動作:

def keyReleaseEvent(self, event):
    if event.key() == Qt.Key.Key_Space:
        print("空格鍵已釋放")

2、事件對象 QKeyEvent

方法說明示例
key()獲取按鍵編碼Qt.Key.Key_Enter
text()獲取字符文本event.text() = "A"
modifiers()檢測修飾鍵 (Ctrl/Shift 等)event.modifiers() & Qt.KeyboardModifier.ControlModifier
isAutoRepeat()判斷是否為長按重復(fù)事件if not event.isAutoRepeat():

3、修飾鍵處理

在 PyQt6 中,鍵盤事件(QKeyEvent)的修飾鍵(Modifier Keys)用于檢測用戶是否同時按下了特殊功能鍵(如 Shift、Ctrl、Alt 等)。以下是修飾鍵的詳細說明和使用方法:

(1)、修飾鍵類型

PyQt6 通過 Qt.KeyboardModifier 枚舉定義修飾鍵,常用值包括:

  • Qt.ShiftModifier:Shift 鍵
  • Qt.ControlModifier:Ctrl 鍵(Windows/Linux)或 Command 鍵(macOS)
  • Qt.AltModifier:Alt 鍵(Windows/Linux)或 Option 鍵(macOS)
  • Qt.MetaModifier:Windows 鍵 或 Command 鍵(macOS)
  • Qt.KeypadModifier:小鍵盤按鍵
  • Qt.NoModifier:無修飾鍵

(2)、檢測修飾鍵

在重寫 keyPressEventkeyReleaseEvent 時,通過 event.modifiers() 獲取修飾鍵狀態(tài):

from PyQt6.QtCore import Qt
from PyQt6.QtWidgets import QMainWindow

class MainWindow(QMainWindow):
    def keyPressEvent(self, event):
        modifiers = event.modifiers()
        
        # 檢測單個修飾鍵
        if modifiers & Qt.ControlModifier:
            print("Ctrl 鍵被按下")
        
        # 檢測組合修飾鍵
        if modifiers == (Qt.ControlModifier | Qt.ShiftModifier):
            print("Ctrl+Shift 組合鍵")
        
        # 檢測按鍵+修飾鍵
        if event.key() == Qt.Key_S and modifiers & Qt.ControlModifier:
            print("Ctrl+S 保存操作")

(3)、組合鍵檢測方法

  • 方法 1:位運算檢測

    def keyPressEvent(self, event):
        if event.key() == Qt.Key_A and event.modifiers() & Qt.ControlModifier:
            print("Ctrl+A 全選")
    
  • 方法 2:QKeyCombination (PyQt6.4+)

    from PyQt6.QtGui import QKeyCombination
    
    def keyPressEvent(self, event):
        combo = QKeyCombination(event.modifiers(), event.key())
        if combo == QKeyCombination(Qt.ControlModifier, Qt.Key_C):
            print("Ctrl+C 復(fù)制")
    

(4)、完整示例

from PyQt6.QtWidgets import QApplication, QMainWindow, QLabel
from PyQt6.QtCore import Qt

class KeyDemoWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.label = QLabel("按任意鍵測試修飾鍵", self)
        self.setCentralWidget(self.label)
        
    def keyPressEvent(self, event):
        mod_text = []
        modifiers = event.modifiers()
        
        if modifiers & Qt.ShiftModifier:
            mod_text.append("Shift")
        if modifiers & Qt.ControlModifier:
            mod_text.append("Ctrl")
        if modifiers & Qt.AltModifier:
            mod_text.append("Alt")
        
        key_name = event.text() if event.text().isprintable() else f"Key_{event.key()}"
        self.label.setText(f"按鍵: {key_name} | 修飾鍵: {', '.join(mod_text)}")

if __name__ == '__main__':
    app = QApplication([])
    window = KeyDemoWindow()
    window.show()
    app.exec()

(5)、注意事項

  1. 跨平臺差異

    • macOS 上 ControlModifier 對應(yīng) Command 鍵
    • 使用 Qt.MetaModifier 檢測真正的 Control 鍵(macOS)
  2. 特殊按鍵處理

    # 檢測 Enter 鍵
    if event.key() == Qt.Key_Return:
        print("Enter 鍵按下")
    
    # 檢測方向鍵
    if event.key() == Qt.Key_Left:
        print("左方向鍵")
    
  3. 事件傳遞

    • 調(diào)用 event.ignore() 允許事件繼續(xù)傳遞
    • 調(diào)用 event.accept() 標記事件已處理

(6)、修飾鍵應(yīng)用場景

組合鍵典型功能
Ctrl+C復(fù)制
Ctrl+V粘貼
Ctrl+Z撤銷
Shift+方向鍵文本選擇
Alt+F4關(guān)閉窗口

4、按鍵值

以下為PyQt6中QKeyEvent的常用按鍵值表格整理,按類別分類便于查閱:

(1)、字母與數(shù)字鍵

按鍵值 (Qt.Key)說明
A - ZQt.Key_A 至 Qt.Key_Z大寫字母A-Z
0 - 9Qt.Key_0 至 Qt.Key_9數(shù)字鍵

(2)、功能鍵

按鍵說明
EscQt.Key_Escape退出鍵
F1 - F12Qt.Key_F1 至 Qt.Key_F12功能鍵
TabQt.Key_Tab制表鍵
CapsLockQt.Key_CapsLock大寫鎖定鍵
EnterQt.Key_Return回車鍵
BackspaceQt.Key_Backspace退格鍵

(3)、方向鍵

按鍵說明
Qt.Key_Up上箭頭
Qt.Key_Down下箭頭
Qt.Key_Left左箭頭
Qt.Key_Right右箭頭

(4)、修飾鍵

按鍵說明
ShiftQt.Key_ShiftShift鍵
CtrlQt.Key_ControlCtrl鍵
AltQt.Key_AltAlt鍵
MetaQt.Key_MetaWindows/Command鍵

(5)、符號鍵

按鍵說明
~Qt.Key_AsciiTilde波浪號
! - @Qt.Key_Exclam 至 Qt.Key_At符號鍵
[ - \Qt.Key_BracketLeft 等方括號/反斜杠

(6)、其他常用鍵

按鍵說明
SpaceQt.Key_Space空格鍵
DeleteQt.Key_Delete刪除鍵
HomeQt.Key_HomeHome鍵
EndQt.Key_EndEnd鍵
PageUpQt.Key_PageUp頁上翻
PageDownQt.Key_PageDown頁下翻

5、注意事項

  1. 事件過濾優(yōu)先級

    • 控件未處理事件時傳遞給父容器
    • 使用 event.ignore() 傳遞事件給父級
    • 使用 event.accept() 標記已處理(默認)
  2. 特殊按鍵
    方向鍵、功能鍵等需通過 Qt.Key 枚舉檢測,例如:

    Qt.Key.Key_Left   # ← 鍵
    Qt.Key.Key_F1      # F1 功能鍵
    
  3. 國際化處理
    使用 text() 而非 key() 可適應(yīng)不同鍵盤布局,如法語鍵盤的 “A” 和 “Q” 位置互換。

6、高級應(yīng)用

  1. 事件過濾器
    通過 installEventFilter() 全局監(jiān)聽鍵盤事件:

    self.obj.installEventFilter(self)  # 安裝過濾器
    
    def eventFilter(self, obj, event):
        if event.type() == QEvent.Type.KeyPress:
            print("全局捕獲按鍵:", event.key())
        return super().eventFilter(obj, event)
    
  2. 快捷鍵系統(tǒng)
    使用 QShortcut 實現(xiàn)快捷鍵綁定:

    from PyQt6.QtGui import QShortcut
    shortcut = QShortcut("Ctrl+O", self)
    shortcut.activated.connect(self.open_file)
    

二、示例演示

1、效果展示

2、源碼分享

import sys
import serial
from PyQt6.QtCore import QThread, pyqtSignal, Qt
from PyQt6.QtSerialPort import QSerialPortInfo
from PyQt6.QtWidgets import (QApplication, QMainWindow, QVBoxLayout, QHBoxLayout,
                             QWidget, QLabel, QComboBox, QPushButton,
                             QTextEdit, QCheckBox, QSpinBox, QGroupBox)
from PyQt6.QtGui import QFont, QIcon, QPalette, QColor,QPainter

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.resize(800,600)
        self.x = 0
        self.y = 0

    def paintEvent(self, a0, QPaintEvent=None):
        p = QPainter(self)
        p.fillRect(self.x,self.y,100,100,Qt.GlobalColor.red)

    def keyPressEvent(self, event):
        if event.key() == Qt.Key.Key_Up:
            self.y-=10
        elif event.key() == Qt.Key.Key_Down:
            self.y+=10
        elif event.key() == Qt.Key.Key_Left:
            self.x-=10
        elif event.key() == Qt.Key.Key_Right:
            self.x += 10
        elif event.modifiers() == Qt.KeyboardModifier.ControlModifier and event.key() == Qt.Key.Key_Q:
            self.close()
        self.update()

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec())

上、下、左、右鍵控制紅色方框移動,Ctrl+q鍵退出。

到此這篇關(guān)于PyQt6 鍵盤事件處理的實現(xiàn)示例的文章就介紹到這了,更多相關(guān)PyQt6 鍵盤事件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python協(xié)程與?asyncio?庫詳情

    python協(xié)程與?asyncio?庫詳情

    這篇文章主要介紹了python協(xié)程與?asyncio?庫詳情,文章基于python展開詳細內(nèi)容,具有一定的參考價值。需要的小伙伴可以參考一下
    2022-05-05
  • python實現(xiàn)高精度求自然常數(shù)e過程詳解

    python實現(xiàn)高精度求自然常數(shù)e過程詳解

    這篇文章主要為大家介紹了python實現(xiàn)高精度求自然常數(shù)e過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05
  • Python多線程與同步機制淺析

    Python多線程與同步機制淺析

    線程(Thread)是操作系統(tǒng)能夠進行運算調(diào)度的最小單位;線程自己不擁有系統(tǒng)資源,只擁有一點兒在運行中必不可少的資源,但它可與同屬一個進程的其它線程共享進程所擁有的全部資源
    2022-12-12
  • 用python爬取電腦壁紙實例代碼

    用python爬取電腦壁紙實例代碼

    大家好,本篇文章主要講的是用python爬取電腦壁紙實例代碼,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-02-02
  • Linux下python與C++使用dlib實現(xiàn)人臉檢測

    Linux下python與C++使用dlib實現(xiàn)人臉檢測

    這篇文章主要為大家詳細介紹了Linux下python與C++使用dlib實現(xiàn)人臉檢測,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • Python局部函數(shù)及用法詳解(含nonlocal關(guān)鍵字)

    Python局部函數(shù)及用法詳解(含nonlocal關(guān)鍵字)

    局部函數(shù)有哪些特征,在使用時需要注意什么呢?接下來就給讀者詳細介紹?Python?局部函數(shù)的用法,對Python局部函數(shù)相關(guān)知識感興趣的朋友跟隨小編一起看看吧
    2022-12-12
  • python實現(xiàn)簡單的計算器功能

    python實現(xiàn)簡單的計算器功能

    這篇文章主要為大家詳細介紹了python實現(xiàn)簡單的計算器功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • Python讀取sqlite數(shù)據(jù)庫文件的方法分析

    Python讀取sqlite數(shù)據(jù)庫文件的方法分析

    這篇文章主要介紹了Python讀取sqlite數(shù)據(jù)庫文件的方法,結(jié)合實例形式分析了Python引入sqlite3模塊操作sqlite數(shù)據(jù)庫的讀取、SQL命令執(zhí)行等相關(guān)操作技巧,需要的朋友可以參考下
    2017-08-08
  • python中zip()方法應(yīng)用實例分析

    python中zip()方法應(yīng)用實例分析

    這篇文章主要介紹了python中zip()方法的應(yīng)用,實例分析了使用zip()方法創(chuàng)建字典的相關(guān)技巧,需要的朋友可以參考下
    2016-04-04
  • Python中的集合介紹

    Python中的集合介紹

    今天小編就為大家分享一篇關(guān)于Python中的集合介紹,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01

最新評論