鍵盤事件無效 實戰PyQt5 097 鍵盤事件

2021-10-16 09:51:42 字數 2333 閱讀 8875

在乙個gui桌面應用中,使用者和程式之間的互動一般通過鍵盤和滑鼠來完成,處理有關鍵盤和滑鼠的事件是乙個gui程式幾乎不可或缺的部分,下面介紹在qt中處理輸入焦點和鍵盤事件的相關知識。

在乙個視窗中,一般會有多個控制項在其中,如果乙個控制項要獲得鍵盤輸入資訊,必須將輸入焦點設定到該控制項上,在視窗中,乙個時刻只有乙個(或者沒有) 控制項可以獲得輸入焦點。可以使用qwidget的下列方法來操作控制項的輸入焦點。

clearfocus(): 清除輸入焦點;

hasfocus(): 如果控制項是輸入焦點,返回true;否則,返回false;

focuswidget(): 返回最後呼叫setfocus()方法的控制項物件;

setfocusproxy(): 指定獲得輸入焦點的控制項物件;

focusproxy(): 返回獲得非當前控制項的輸入焦點的控制項物件;

focusnextprevchild(): 如果isnext引數為true,功能相當於focusnextchild();如果isnext引數為false,功能相當於focuspreviouschild();

settaborder(,) - 靜態函式。用於指定按下鍵時,輸入焦點的移動順序。component2是當輸入焦點在component1是按下鍵後的輸入焦點所在的控制項。如果有多個控制項,則需要呼叫多次。例如,指定輸入焦點在按下鍵的變化順序為widget1->widget2->widget3->widget4,相應的**為:

qwidget.settaborder(widget1,widget2)                  qwidget.settaborder(widget2,widget3)                  qwidget.settaborder(widget3,widget4)
focuspolicy():返回當前獲得輸入焦點的方式;

grabkeyboard():限定鍵盤輸入。在呼叫releasekeyboard()之前,其他控制項無法獲得輸入焦點;

releasekeyboard():釋放之前所作的鍵盤輸入限定。

qwidget類的下列方法可用來處理焦點事件:

在測試**中,我們建立乙個帶有qpushbutton按鈕和兩個qlineedit單行編輯的視窗。對於單行編輯框,處理獲得和失去輸入焦點的事件。通過按下按鈕,我們將輸入焦點設定為第二個單行編輯框。 另外,通過tab鍵順向切換焦點,或者通過s hift+tab反向切換焦點。完整**如下:

執行結果如下圖:

快捷鍵(也稱熱鍵)是gui程式互動操作的一種常見功能,在乙個gui應用的系統選單裡,我們常常可以見到選單項有對應的快捷鍵操作。快捷鍵用來快速設定輸入焦點,要設定快捷鍵,可以在相應的字母上加上「&」,程式執行後,會在相應的字母下加下劃線以提示使用者。按下alt+帶下劃線的字母,對應的控制項即可獲得輸入焦點,執行相應動作。

對於編輯框這類沒有文字的控制項,在設定快捷鍵時,可以建立乙個qlabel物件,並通過呼叫setbuddy(component)與控制項相關聯。如果不建立qlabel物件,則可以使用qwidget的下列的方法來設定和管理快捷鍵:

按下快捷鍵時,產生qevent.shortcut事件,可在函式event(self,event)中處理。event引數是qshortcutevent物件,有以下方法:

執行結果如下圖所示:

按下並釋放鍵盤按鍵時,以下方法將被呼叫:

上述方法中的event引數為qkeyevent物件,其常用方法有:

isautorepeat(): 如果一直按著某鍵,返回true;否則,返回false;

match(qkeysequence.standardkey key): 如果當前的鍵組合與key相同,返回true;否則,返回false。

比如,是否按下了複製快捷鍵的**:

if e.matches(qkeysequence.copy):                   print("組合鍵為",qkeysequence.copy)
處理鍵盤按鍵時,需要注意以下幾點:

測試**演示裡使用keypressevent和event來捕獲鍵盤按下事件,並使用paintevent將其顯示在視窗**。完整**如下:

測試結果如下圖:

pyqt5切換python版本 pyqt5介面切換

主要的思路就是建立兩個frame 如果有兩個以上同理 使用setvisible 函式顯示或者隱藏frame 引數是bool值 import sys from pyqt5.qtwidgets import from pyqt5.qtcore import from pyqt5.qtgui import...

pyqt5按鈕事件開啟檔案

self.pushbutton.clicked.connect self.btn1 click 設定繫結事件def btn1 click self filename,qfiledialog.getopenfilename qwidget open r e images1 開啟檔案或者如下 getop...

PyQt5教程 四 事件與訊號

在這部分教程中我們將 在程式內部發生的事件與訊號。在事件模型中有三個參與者 事件源 事件 物件 事件接收者 事件源是狀態發生變化的物件。它會生成事件。事件 物件 封裝了事件源中狀態的變動。事件接收者是要通知的物件。事件源物件將事件處理的工作交給事件接收者。pyqt5有乙個獨特的signal slot...