Обработка комбинаций: Чтобы обработать комбинации, вам нужно проверять не только event.key(), но и модификаторы, такие как Qt.KeyboardModifier.ControlModifier, Qt.KeyboardModifier.AltModifier и т.д.
Перехват Alt+F4: Комбинация Alt+F4 является системной и обрабатывается оконным менеджером операционной системы на более низком уровне, чем события PyQt. Для её перехвата нужно использовать более мощный механизм - переопределение обработчика событий закрытия окна closeEvent.
from PyQt6.QtWidgets import QApplication, QMainWindow
from PyQt6.QtCore import Qt
from PyQt6.QtGui import QKeyEvent, QCloseEvent
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("Защищенное окно")
self.setGeometry(100, 100, 800, 600)
def closeEvent(self, event: QCloseEvent):
# Блокировка закрытия окна по Alt+F4 или через кнопку "Закрыть"
print("Попытка закрыть окно заблокирована!")
event.ignore()
def keyPressEvent(self, event: QKeyEvent):
# Блокировка одиночных клавиш
forbidden_single_keys = {
Qt.Key.Key_Escape,
Qt.Key.Key_Tab
}
if event.key() in forbidden_single_keys:
print("Блокировка одиночной клавиши:", Qt.Key(event.key()).name)
return
# Блокировка комбинаций с модификаторами
# Комбинация Alt+F4
if event.modifiers() == Qt.KeyboardModifier.AltModifier and event.key() == Qt.Key.Key_F4:
print("Блокировка Alt+F4")
return
# Комбинация Ctrl+W (Ctrl+F4 тоже можно добавить)
if event.modifiers() == Qt.KeyboardModifier.ControlModifier and event.key() == Qt.Key.Key_W:
print("Блокировка Ctrl+W")
return
# Комбинация Ctrl+Tab
if event.modifiers() == Qt.KeyboardModifier.ControlModifier and event.key() == Qt.Key.Key_Tab:
print("Блокировка Ctrl+Tab")
return
# Блокировка любого нажатия Ctrl
if event.key() == Qt.Key.Key_Control or event.modifiers() == Qt.KeyboardModifier.ControlModifier:
print("Блокировка Control")
return
# Если клавиша не заблокирована, передаем событие дальше
super().keyPressEvent(event)
if __name__ == '__main__':
app = QApplication([])
window = MainWindow()
window.show()
app.exec()