Я бы хотел иметь возможность загружать виджет (в данном случае QMainWindow) из файла .ui
, но также иметь возможность расширять класс, чтобы я мог делать такие вещи, как перехват событий клавиатуры.
Например, у меня есть следующее, которое не работает, но показывает, что я пытаюсь выполнить:
class MyMainWindow(QMainWindow):
def __init__(self):
super(MyMainWindow, self).__init__()
self.window = QUiLoader().load("mainwindow.ui", self)
self.setCentralWidget(self.window)
self.window.keyPressEvent = self.key_pressed
self.window.setEnabled(True)
def show(self):
self.window.show()
def key_pressed(self, event):
print(event)
Поскольку я не могу расширить объект, загруженный с QUiLoader
, я попытался захватитьkeyPressEvent
метод в этом объекте, и назначить его для моего собственного key_pressed
метода.Это не работает, но я не уверен, как еще захватить события клавиатуры.
Я знаю, что мог бы создать MyMainWindow
и установить его базовый класс на QMainWindow
, а затем переопределить keyPressEvent
метод, но тогда я должен сделать все макет в коде, и я бы предпочел использовать файл .ui
.Как ты это делаешь?