亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

一、鍵盤事件處理詳解

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

1、核心事件處理器

按鍵按下事件
重寫 keyPressEvent 方法處理按鍵動(dòng)作:

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

按鍵釋放事件
重寫 keyReleaseEvent 處理釋放動(dòng)作:

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

2、事件對(duì)象 QKeyEvent

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

3、修飾鍵處理

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

(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)、檢測(cè)修飾鍵

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

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

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

(3)、組合鍵檢測(cè)方法

  • 方法 1:位運(yùn)算檢測(cè)

    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("按任意鍵測(cè)試修飾鍵", 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)、注意事項(xiàng)

  1. 跨平臺(tái)差異

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

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

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

(6)、修飾鍵應(yīng)用場(chǎ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)、符號(hào)鍵

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

(6)、其他常用鍵

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

5、注意事項(xiàng)

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

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

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

6、高級(jí)應(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 實(shí)現(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())

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

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

相關(guān)文章

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

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

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

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

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

    Python多線程與同步機(jī)制淺析

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

    用python爬取電腦壁紙實(shí)例代碼

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

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

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

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

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

    python實(shí)現(xiàn)簡(jiǎn)單的計(jì)算器功能

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

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

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

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

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

    Python中的集合介紹

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

最新評(píng)論