Привязка функции к клавише python. Работа с GUI - PullRequest
0 голосов
/ 04 февраля 2020

В данный момент я работаю над проектом, и мне нужно связать команду управления клавишами стрелка влево, стрелка вправо

, каждая с другой функцией. Я понял, как связать всю клавиатуру с функциями. Но я не могу понять, как это сделать для отдельных ключей. Я не уверен, что мне разрешено использовать Tkinter. Есть ли альтернатива использованию этого для привязки отдельных ключей?

Это то, что я сделал, чтобы связать всю клавиатуру.

from random import randint
from PyQt5 import uic
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5 import QtCore

class KeyboardWidget(QWidget):
    keyPressed = pyqtSignal(str)
    def keyPressEvent(self,keyEvent):
        self.keyPressed.emit(keyEvent.text())

, а затем я импортирую этот код в основной файл и вызываю функцию, связанную с любой клавишей.

Если у вас есть какой-нибудь способ сделать это, чтобы я мог нажимать на отдельные клавиши, это было бы удивительно!

1 Ответ

0 голосов
/ 04 февраля 2020

QWidget :: keyPressEvent (QKeyEvent * event)

Этот обработчик события для события можно переопределить в подклассе для получения событий нажатия клавиш для виджета.


int QKeyEvent :: key () const

Возвращает код клавиши, которая была нажата или отпущена.

from PyQt5.QtGui import QPainter, QColor
from PyQt5.QtWidgets import QWidget, QApplication, QLabel, QPushButton
from PyQt5.QtCore import Qt


class Example(QWidget):
    def __init__(self):
        super().__init__()
        self.setFixedSize(700, 400)
        self.setMouseTracking(True)
        self.x = 300
        self.y = 200
        self.show()

    def up(self):
        self.update()

    def keyPressEvent(self, event):
        if event.key() == Qt.Key_Left: 
            self.x -= 5
        elif event.key() == Qt.Key_Right:
            self.x += 5
        elif event.key() == Qt.Key_Up:    
            self.y -= 5
        elif event.key() == Qt.Key_Down:  
            self.y += 5
        self.up()    

    def paintEvent(self, event):
        if self.x <= -45:
            self.x = 725
        elif self.x >= 725:
            self.x = -45
        if self.y <= -25:
            self.y = 415
        elif self.y >= 415:
            self.y = -25
        self.qp = QPainter()
        self.qp.begin(self)
        self.drawFlag()
        self.qp.end()

    def drawFlag(self):
        self.qp.setBrush(QColor(150, 75, 0))
        self.qp.drawEllipse(self.x, self.y, 50, 20)
        self.qp.setBrush(QColor(0, 255, 255))
        self.qp.drawEllipse(self.x + 10, self.y - 10, 30, 20)


if __name__ == '__main__': 
    import sys
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

enter image description here

...