Задать вопрос
TomasHuk
@TomasHuk

Как закрыть окно PyQt комбинацией горячих клавиш?

Допустим есть обычное окно:
import sys
from PyQt4 import QtGui, QtCore

class Wind(QtGui.QWidget):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)
        self.setWindowFlags(QtCore.Qt.FramelessWindowHint|QtCore.Qt.Tool)
        self.setGeometry(300, 300, 250, 150)

    def close_window(self):
        self.close()
        quit()

app = QtGui.QApplication(sys.argv)
icon = Wind()
icon.show()
sys.exit(app.exec_())

Как закрыть его комбинацией "Shift+Ctrl+Alt+Q", например?
Знаю, что есть возможность подключить горячие клавиши через QKeySequence, но у меня не получается.
  • Вопрос задан
  • 1503 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 2
@zaswed
при активном окне
def keyPressEvent(self, e):
        if int(e.modifiers()) == (QtCore.Qt.ControlModifier +
                                      QtCore.Qt.AltModifier +
                                      QtCore.Qt.ShiftModifier):
            if e.key() == QtCore.Qt.Key_Q:
                self.close_window()
Ответ написан
Комментировать
TomasHuk
@TomasHuk Автор вопроса
Опытным путем установлено, что в PyQt можно отслеживать только 2 одновременно нажатых модификатора. Вариант "Shift+Ctrl+Alt+SomeKey" не обрабатывается.
В итоге есть два варианта:
1. в класс Wind в метод __init__ добавить
QtGui.QShortcut(QtGui.QKeySequence("Shift+Alt+Q"), self, quit)

2. в класс Windдобавить метод:
def keyPressEvent(self, e):
        if int(e.modifiers()) == (QtCore.Qt.ControlModifier + QtCore.Qt.AltModifier):
            if e.key() == QtCore.Qt.Key_Q:
                self.close_window()
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
DarkMode
@DarkMode
Made out of meat.
попоробуй через модуль keyboard https://github.com/boppreh/keyboard
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы