Přejít na hlavní obsah

PyQt5. Práce s klávesnicí. Příklady a pokyny

PyQt5 - je to sada knihoven Python, která poskytuje možnosti pro vytváření grafických uživatelských rozhraní. Umožňuje vývojářům snadno vytvářet multiplatformní aplikace pomocí bohaté sady funkcí.

V tomto článku se podíváme na to, jak komunikovat s klávesnicí v PyQt5. Naučíme se základní metody zpracování stisku kláves, automatické přepínání ostření mezi ovládacími prvky a také přizpůsobíme události klávesnice tak, aby prováděly určité akce. Na konci vám poskytneme několik příkladů, které vám pomohou pochopit toto téma.

Práce s klávesnicí je nedílnou součástí vytváření uživatelského rozhraní, protože mnoho akcí, jako je zadávání textu, navigace a dokonce provádění příkazů, se obvykle provádí pomocí klávesnice. Proto je důležité vědět, jak správně zpracovat události a vytvořit uživatelsky přívětivé rozhraní.

Tento článek bude užitečný jak pro začátečníky, tak pro zkušené vývojáře, kteří se chtějí dozvědět o možnostech práce s klávesnicí v PyQt5 a zdokonalit své dovednosti při vytváření uživatelských rozhraní.

Základy práce s klávesnicí v PyQt5

Jednou z hlavních funkcí PyQt5 je zpracování úhozů. K tomu lze použít metodu keyPressEvent (), která je vyvolána stisknutím klávesy. V rámci této metody lze určit akce, které mají být provedeny stisknutím určité klávesy.

Ke zpracování klávesy Enter lze například použít následující kód:

from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QLabelclass MyWidget(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):# Создаем вертикальный макетlayout = QVBoxLayout()# Создаем меткуself.label = QLabel("")# Добавляем метку в макетlayout.addWidget(self.label)# Устанавливаем макет для виджетаself.setLayout(layout)def keyPressEvent(self, event):# Проверяем, была ли нажата клавиша Enterif event.key() == Qt.Key_Enter:self.label.setText("Клавиша Enter была нажата")if __name__ == '__main__':app = QApplication([])window = MyWidget()window.show()app.exec_()

V tomto případě se po stisknutí klávesy Enter na obrazovce zobrazí zpráva "klávesa Enter byla stisknuta".

Kromě zpracování úhozů umožňuje PyQt5 zpracovávat další události klávesnice, jako je uvolnění klávesy (keyReleaseEvent ()), zadávání znaků (textInputEvent ())), pohyb ukazatele klávesnice (focusInEvent () a focusOutEvent ()) a mnoho dalších.

Použití PyQt5 pro práci s klávesnicí tedy umožňuje vytvářet interaktivní aplikace s podporou různých akcí klávesnice, díky čemuž je uživatelské rozhraní uživatelsky přívětivější a intuitivnější pro uživatele.

Psaní textu z klávesnice

PyQt5 poskytuje pohodlné nástroje pro práci s klávesnicí a psaní. Pomocí různých metod a signálů třídy QLineEdit lze vytvořit pole pro zadávání textu a zpracovat zadané hodnoty.

Základní metody pro práci s klávesnicí a psaní v PyQt5:

  • setText (text) - nastaví text do vstupního pole;
  • text() - vrací aktuální text ze vstupního pole;
  • setPlaceholderText ( text) - nastaví text nápovědy zobrazené ve vstupním poli;
  • setEchoMode (mode) - nastavuje režim zobrazení zadaného textu (např. jako prostý text, heslo atd.).

Ke zpracování vstupní události lze použít signály třídy QLineEdit, jako jsou:

  • textChanged-spustí se při změně textu ve vstupním poli;
  • returnPressed-aktivuje se stisknutím klávesy Enter;
  • editingFinished-spustí se po dokončení úpravy vstupního pole (ztráta zaostření nebo klepnutí na jinou položku rozhraní).

Příklad použití metod a signálů třídy QLineEdit k zadávání textu z klávesnice:

import sysfrom PyQt5.QtWidgets import QApplication, QLineEdit, QVBoxLayout, QWidgetdef on_text_changed():text = line_edit.text()print(f"Текст: ")app = QApplication(sys.argv)window = QWidget()layout = QVBoxLayout()line_edit = QLineEdit()line_edit.setPlaceholderText("Введите текст. ")line_edit.textChanged.connect(on_text_changed)layout.addWidget(line_edit)window.setLayout(layout)window.show()sys.exit(app.exec_())

V tomto příkladu se vytvoří okno s jedním polem pro zadávání textu. Při změně textu se v poli vyvolá funkce on_text_changed, která do konzole vloží aktuální text. Je také nainstalován text-nápověda, která se zobrazí ve vstupním poli. Po zavření okna se aplikace dokončí.

Zpracování stisku kláves

Při práci s PyQt5 lze snadno zpracovat události související se stiskem kláves. Klíčové úlohy zpracování stisku kláves je dosaženo přetížením standardních metod třídy odpovědné za požadovaný widget.

Jednou z nejpoužívanějších metod pro práci s klávesnicí je metoda keypressevent() . Provádí se pokaždé, když stisknete klávesu uvnitř widgetu. Tuto metodu můžete přepsat a přidat svou vlastní logiku zpracování událostí klávesnice.

Zde je příklad, který ukazuje, jak lze přepsat metodu keyPressEvent () pro widget QMainWindow :

from PyQt5.QtCore import Qtfrom PyQt5.QtGui import QKeyEventfrom PyQt5.QtWidgets import QMainWindowclass MyMainWindow(QMainWindow):def keyPressEvent(self, event: QKeyEvent):if event.key() == Qt.Key_Escape:self.close()

V tomto příkladu jsme vytvořili podtřídu MyMainWindow, která předefinuje metodu keypressevent() . Uvnitř metody zkontrolujeme, zda byla stisknuta klávesa Escape. Pokud ano, voláme metodu close() k uzavření hlavního okna aplikace.

Všechny dostupné kódy kláves jsou v modulu QtCore.Qt . V tomto příkladu jsme použili Qt.Key_Escape pro klávesu Escape. V závislosti na vašich potřebách však můžete použít i jiné kódy kláves.

To je jen jeden ze způsobů, jak zvládnout stisknutí kláves pomocí PyQt5. PyQt5 má další metody a události, které lze použít k práci s klávesnicí, v závislosti na vašich konkrétních požadavcích.

Přiřazení klávesových zkratek

PyQt5 poskytuje možnost přiřadit klávesové zkratky pro různé akce v aplikaci. Klávesové zkratky umožňují uživateli provádět operace rychle a pohodlně bez použití myši.

Pro přiřazení klávesových zkratek se v PyQt5 používá třída QShortcut. Tato třída vám umožňuje propojit konkrétní klávesovou zkratku se slotem, který se provede stisknutím klávesových zkratek.

Chcete-li vytvořit klávesovou zkratku, musíte nejprve vytvořit instanci třídy QShortcut a předat ji klávesovou zkratkou pomocí metody setKey. Pak musíte připojit signál activated touto klávesovou zkratkou k příslušnému slotu.

Zde je příklad, který přiřadí klávesu Ctrl + Q akci zavření okna aplikace:

shortcut = QShortcut(QKeySequence("Ctrl+Q"), self)shortcut.activated.connect(self.close)

V tomto příkladu vytvoříme instanci třídy QShortcut, předáme ji klávesovou zkratkou Ctrl+Q pomocí metody setKey a poté připojíme signál activated ke slotu close. Když uživatel stiskne klávesy Ctrl + Q, vyvolá se Slot close, který zavře okno aplikace.

Klávesové zkratky můžete přiřadit ke všem činnostem ve své aplikaci. Můžete například přiřadit klávesové zkratky ke kopírování, vkládání, zrušení atd. Hlavní věc je, že klávesová zkratka je uživatelsky přívětivá a není v rozporu s jinými horkými klávesami ve vaší aplikaci.

Práce s modifikačními klávesami

K určení stavu modifikačních kláves v PyQt5 lze použít metody třídy QKeyEvent. Třída QKeyEvent poskytuje informace o události stisknutí nebo uvolnění klávesy, včetně kódů kláves a informací o stavu modifikačních kláves.

Příklad použití modifikačních kláves:

from PyQt5.QtCore import Qtfrom PyQt5.QtWidgets import QApplication, QMainWindow, QLabelclass MyWindow(QMainWindow):def __init__(self):super().__init__()self.label = QLabel("Клавиша-модификатор не нажата")self.setCentralWidget(self.label)def keyPressEvent(self, event):if event.modifiers() & Qt.ShiftModifier:self.label.setText("Нажата клавиша-модификатор Shift")elif event.modifiers() & Qt.ControlModifier:self.label.setText("Нажата клавиша-модификатор Ctrl")elif event.modifiers() & Qt.AltModifier:self.label.setText("Нажата клавиша-модификатор Alt")else:self.label.setText("Клавиша-модификатор не нажата")if __name__ == "__main__":app = QApplication([])window = MyWindow()window.show()app.exec_()

Ve výše uvedeném příkladu je vytvořena Třída MyWindow, která zdědí QMainWindow. Metoda keyPressEvent zpracovává událost stisknutí klávesy. Když stisknete modifikační klávesu Shift, Ctrl nebo Alt, Text v Qlabelu se aktualizuje pomocí klávesy modifikátoru. Pokud není stisknuta žádná modifikační klávesa, text v Qlabelu zůstává stejný.

Práce s modifikačními klávesami v PyQt5 vám tedy umožňuje identifikovat a zpracovat stav modifikačních kláves, abyste mohli provádět další akce, když stisknete určité klávesy.