最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

一、鍵盤事件處理詳解

在 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 等)。以下是修飾鍵的詳細(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)、檢測修飾鍵

在重寫 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() 標(biāo)記事件已處理

(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() 標(biāo)記已處理(默認(rèn))
  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)文章

最新評論

科尔| 凉城县| 临澧县| 左权县| 漳州市| 柳江县| 冷水江市| 呼图壁县| 桑日县| 岫岩| 宜都市| 天气| 阿荣旗| 华宁县| 岑溪市| 宁阳县| 朝阳市| 张掖市| 抚州市| 孝义市| 武宣县| 河西区| 开平市| 翁牛特旗| 佛坪县| 成都市| 沛县| 团风县| 南投市| 榆社县| 金坛市| 龙川县| 潼南县| 邳州市| 东兴市| 宁强县| 临猗县| 唐河县| 永宁县| 临安市| 龙门县|