Клавиатура в PyQt5

Есть код. Всё работает, кроме одного.
Как сделал так, чтобы при нажатию клавиш 1 - 6 произовдился звук. Но он не производиться. Производиться только по нажати кнопок в самом окне PyQt.

import sys
from PyQt5 import QtMultimedia, QtCore
from PyQt5.QtGui import QPixmap
from PyQt5.QtWidgets import QWidget, QLabel, QPushButton, QLineEdit, QApplication, QMainWindow
from PyQt5.QtWidgets import QWidget, QTableView, QDialog, QPushButton, QApplication, QVBoxLayout
from PyQt5.QtSql import QSqlDatabase, QSqlTableModel

DB_ALBUMS = 'ALBUMS'
DB_SONGS = 'SONGS'


class Music(QDialog):
    def __init__(self, parent):
        super().__init__(parent)

        self.setWindowTitle('Песни')
        self.setWindowTitle('Список песен')
        self.setGeometry(250, 55, 800, 400)

        main_layout = QVBoxLayout()

        db = QSqlDatabase.database(DB_SONGS)
        self.model = QSqlTableModel(self, db)
        self.model.setTable('Songs')

        self.view_films = QTableView()
        self.view_films.setModel(self.model)

        main_layout.addWidget(self.view_films)

        self.setLayout(main_layout)

    def refresh(self):
        self.model.select()


class Albom(QDialog):
    def __init__(self, parent):
        super().__init__(parent)

        self.setWindowTitle('Альбомы')
        self.setWindowTitle('Список альбомов')
        self.setGeometry(250, 55, 800, 400)

        main_layout = QVBoxLayout()

        db = QSqlDatabase.database(DB_ALBUMS)
        self.model = QSqlTableModel(self, db)
        self.model.setTable('Albom')

        self.view_films = QTableView()
        self.view_films.setModel(self.model)

        main_layout.addWidget(self.view_films)

        self.setLayout(main_layout)

    def refresh(self):
        self.model.select()



class Guitar(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

        self.db = QSqlDatabase.addDatabase('QSQLITE', DB_ALBUMS)
        self.db.setDatabaseName('Database_ALbom.sqlite')
        self.db.open()

        self.initUI()

        self.db_01 = QSqlDatabase.addDatabase('QSQLITE', DB_SONGS)
        self.db_01.setDatabaseName('Database_Musik.sqlite')
        self.db_01.open()

        self.initUI()

    def initUI(self):
        self.setGeometry(250, 55, 1200, 800)
        self.setWindowTitle('Гитара')

        self.First_button = QPushButton('Первая струна(клавиша 1)', self)
        self.First_button.resize(170, 50)
        self.First_button.move(40, 100)
        self.First_button.clicked.connect(lambda: self._play('D:\\Downloads\\First_str.mp3'))
        self.First_button.setShortcut('1')

        self.Second_button = QPushButton('Вторая струна(клавиша 2)', self)
        self.Second_button.resize(170, 50)
        self.Second_button.move(40, 200)
        self.Second_button.clicked.connect(lambda: self._play('D:\\Downloads\\Second_str.mp3'))
        self.Second_button.setShortcut('2')

        self.Third_button = QPushButton('третья струна(клавиша 3)', self)
        self.Third_button.resize(170, 50)
        self.Third_button.move(40, 300)
        self.Third_button.clicked.connect(lambda: self._play('D:\\Downloads\\Third_str.mp3'))
        self.Third_button.setShortcut('3')

        self.Fourth_button = QPushButton('Четвёртая струна(клавиша 4)', self)
        self.Fourth_button.resize(170, 50)
        self.Fourth_button.move(40, 400)
        self.Fourth_button.clicked.connect(lambda: self._play('D:\\Downloads\\Fourth_str.mp3'))
        self.Fourth_button.setShortcut('4')

        self.Fifth_button = QPushButton('Пятая струна(клавиша 5)', self)
        self.Fifth_button.resize(170, 50)
        self.Fifth_button.move(40, 500)
        self.Fifth_button.clicked.connect(lambda: self._play('D:\\Downloads\\Fifth_str.mp3'))
        self.Fifth_button.setShortcut('5')

        self.Sixth_button = QPushButton('Шестая струна(клавиша 6)', self)
        self.Sixth_button.resize(170, 50)
        self.Sixth_button.move(40, 600)
        self.Sixth_button.clicked.connect(lambda: self._play('D:\\Downloads\\Sixth_str.mp3'))
        self.Sixth_button.setShortcut('6')

        self.Accords_button = QPushButton('список альбомов', self)
        self.Accords_button.resize(200, 100)
        self.Accords_button.move(300, 500)
        self.Accords_button.clicked.connect(self._show_albom)

        self.Songs_button = QPushButton('список песен', self)
        self.Songs_button.resize(200, 100)
        self.Songs_button.move(300, 200)
        self.Songs_button.clicked.connect(self._show_music)

        self.pixmap = QPixmap('12.jpg')
        self.image = QLabel(self)
        self.image.move(650, 2)
        self.image.resize(600, 900)
        self.image.setPixmap(self.pixmap)

    def _play(self, url):
        self.url = QtCore.QUrl.fromLocalFile(url)
        self.content = QtMultimedia.QMediaContent(self.url)
        self.player = QtMultimedia.QMediaPlayer()
        self.player.setMedia(self.content)
        self.player.play()

    def _show_music(self):
        music = Music(self)
        music.refresh()
        music.show()

    def _show_albom(self):
        albom = Albom(self)
        albom.refresh()
        albom.show()


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

Ответы (1 шт):

Автор решения: S. Nick

void QWidget::keyPressEvent(QKeyEvent *event)

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

import sys
from PyQt5 import QtMultimedia, QtCore
from PyQt5.QtGui import QPixmap
from PyQt5.QtWidgets import QWidget, QLabel, QPushButton, QLineEdit, QApplication, QMainWindow
from PyQt5.QtWidgets import QWidget, QTableView, QDialog, QPushButton, QApplication, QVBoxLayout
from PyQt5.QtSql import QSqlDatabase, QSqlTableModel

DB_ALBUMS = 'ALBUMS'
DB_SONGS = 'SONGS'


class Music(QDialog):
    def __init__(self, parent):
        super().__init__(parent)

        self.setWindowTitle('Песни')
        self.setWindowTitle('Список песен')
        self.setGeometry(250, 55, 800, 400)

        main_layout = QVBoxLayout()

        db = QSqlDatabase.database(DB_SONGS)
        self.model = QSqlTableModel(self, db)
        self.model.setTable('Songs')

        self.view_films = QTableView()
        self.view_films.setModel(self.model)

        main_layout.addWidget(self.view_films)

        self.setLayout(main_layout)

    def refresh(self):
        self.model.select()


class Albom(QDialog):
    def __init__(self, parent):
        super().__init__(parent)

        self.setWindowTitle('Альбомы')
        self.setWindowTitle('Список альбомов')
        self.setGeometry(250, 55, 800, 400)

        main_layout = QVBoxLayout()

        db = QSqlDatabase.database(DB_ALBUMS)
        self.model = QSqlTableModel(self, db)
        self.model.setTable('Albom')

        self.view_films = QTableView()
        self.view_films.setModel(self.model)

        main_layout.addWidget(self.view_films)

        self.setLayout(main_layout)

    def refresh(self):
        self.model.select()


class Guitar(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

        self.db = QSqlDatabase.addDatabase('QSQLITE', DB_ALBUMS)
        self.db.setDatabaseName('Database_ALbom.sqlite')
        self.db.open()

        self.initUI()

        self.db_01 = QSqlDatabase.addDatabase('QSQLITE', DB_SONGS)
        self.db_01.setDatabaseName('Database_Musik.sqlite')
        self.db_01.open()

        self.initUI()

    def initUI(self):
        self.setGeometry(250, 55, 1200, 800)
        self.setWindowTitle('Гитара')

        self.First_button = QPushButton('Первая струна(клавиша 1)', self)
        self.First_button.resize(170, 50)
        self.First_button.move(40, 100)                   
        self.First_button.clicked.connect(lambda: self._play('D:\\Downloads\\First_str.mp3'))
        self.First_button.setShortcut('1')

        self.Second_button = QPushButton('Вторая струна(клавиша 2)', self)
        self.Second_button.resize(170, 50)
        self.Second_button.move(40, 200)
        self.Second_button.clicked.connect(lambda: self._play('D:\\Downloads\\Second_str.mp3'))
        self.Second_button.setShortcut('2')

        self.Third_button = QPushButton('третья струна(клавиша 3)', self)
        self.Third_button.resize(170, 50)
        self.Third_button.move(40, 300)
        self.Third_button.clicked.connect(lambda: self._play('D:\\Downloads\\Third_str.mp3'))
        self.Third_button.setShortcut('3')

        self.Fourth_button = QPushButton('Четвёртая струна(клавиша 4)', self)
        self.Fourth_button.resize(170, 50)
        self.Fourth_button.move(40, 400)
        self.Fourth_button.clicked.connect(lambda: self._play('D:\\Downloads\\Fourth_str.mp3'))
        self.Fourth_button.setShortcut('4')

        self.Fifth_button = QPushButton('Пятая струна(клавиша 5)', self)
        self.Fifth_button.resize(170, 50)
        self.Fifth_button.move(40, 500)
        self.Fifth_button.clicked.connect(lambda: self._play('D:\\Downloads\\Fifth_str.mp3'))
        self.Fifth_button.setShortcut('5')

        self.Sixth_button = QPushButton('Шестая струна(клавиша 6)', self)
        self.Sixth_button.resize(170, 50)
        self.Sixth_button.move(40, 600)
        self.Sixth_button.clicked.connect(lambda: self._play('D:\\Downloads\\Sixth_str.mp3'))
        self.Sixth_button.setShortcut('6')

        self.Accords_button = QPushButton('список альбомов', self)
        self.Accords_button.resize(200, 100)
        self.Accords_button.move(300, 500)
        self.Accords_button.clicked.connect(self._show_albom)

        self.Songs_button = QPushButton('список песен', self)
        self.Songs_button.resize(200, 100)
        self.Songs_button.move(300, 200)
        self.Songs_button.clicked.connect(self._show_music)

        self.pixmap = QPixmap('12.jpg')
        self.image = QLabel(self)
        self.image.move(650, 2)
        self.image.resize(600, 900)
        self.image.setPixmap(self.pixmap)


    def _play(self, url):
        self.url = QtCore.QUrl.fromLocalFile(url)
        self.content = QtMultimedia.QMediaContent(self.url)
        self.player = QtMultimedia.QMediaPlayer()
        self.player.setMedia(self.content)
        self.player.play()

# +++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
    def keyPressEvent(self, event):
        if event.key() == QtCore.Qt.Key_1:
            self._play('D:\\Downloads\\First_str.mp3')
        elif event.key() == QtCore.Qt.Key_2:
            self._play('D:\\Downloads\\Second_str.mp3')
        elif event.key() == QtCore.Qt.Key_3:
            self._play('D:\\Downloads\\Third_str.mp3')
        elif event.key() == QtCore.Qt.Key_4:
            self._play('D:\\Downloads\\Fourth_str.mp3')
        elif event.key() == QtCore.Qt.Key_5:
            self._play('D:\\Downloads\\Fifth_str.mp3')
        elif event.key() == QtCore.Qt.Key_6:
            self._play('D:\\Downloads\\Sixth_str.mp3')
            
        super().keyPressEvent(event)
# +++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

    def _show_music(self):
        music = Music(self)
        music.refresh()
        music.show()

    def _show_albom(self):
        albom = Albom(self)
        albom.refresh()
        albom.show()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Guitar()
    ex.show()
    sys.exit(app.exec_())
→ Ссылка