Не работает отлов событий клавиатуры
Объясните пожалуйста мою ошибку. Создаю окно, вызываю метод отображения этого окна, но почему-то перегрузка метода keyPressEvent не вызывается (т.е. не работает).
class MainWin(QMainWindow):
def __init__(self):
super().__init__()
self.ui = uic.loadUi("main_win.ui")
self.win_show()
def win_show(self):
self.ui.show()
def keyPressEvent(self, event):
if event.key() == QtCore.Qt.Key_Q:
print("1")
event.accept()
if __name__ == "__main__":
App = QApplication(sys.argv)
main_win = MainWin()
App.exec_()
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
Написав:
self.ui = uic.loadUi("main_win.ui")
вы создаете новый объект, который отличается от объекта self,
для которого вы переопределяете keyPressEvent
Вы можете написать:
self.ui = uic.loadUi("test_2.ui", self) # self !!!
и у вас все заработает, но вам незачем создавать объект self.ui
Сделайте просто:
uic.loadUi("main.ui", self) # , self !!!
import sys
from PyQt5 import QtCore, QtGui, QtWidgets, uic
from PyQt5.Qt import *
class MainWin(QMainWindow):
def __init__(self):
super().__init__()
# - self.ui = uic.loadUi("main_win.ui")
# print(self.ui)
# + self.ui = uic.loadUi("main_win.ui", self)
# print(self.ui) # ^^^^ !!!!
# Загрузите страницу интерфейса
uic.loadUi("main_win.ui", self)
# ^^^^
self.setFocusPolicy(QtCore.Qt.ClickFocus) # виджет принимает фокус при нажатии.
def keyPressEvent(self, event):
# print(self)
if event.key() == QtCore.Qt.Key_Q:
print("Key_Q: 1")
event.accept()
if __name__ == "__main__":
app = QApplication(sys.argv)
main_win = MainWin()
main_win.show()
sys.exit(app.exec_())
