Правильная обработка ярлыка QAction

У меня есть приложение, в котором пользователи могут добавлять свои собственные последовательности клавиш и открывать файл или папку, когда они нажимают свои последовательности клавиш. Я уже выполнил все проверки ввода пользователя, и мое приложение почти завершено, пока я не столкнулся с этой проблемой.

Вот код, который объяснит:

result = [["path\\to\\foler", "Q, R"], ["path\\to\\file.ext", "Q, R, 1"]]
for data in result:
    if os.path.exists(data[0]):
        shortcut = QAction(owner)
        shortcut.setShortcut(QKeySequence(data[1]))
        shortcut.triggered.connect(lambda checked, p=data[0]: func_to_open(p))
        owner.addAction(shortcut)
        owner.shortcut_list += [shortcut]

Способ отключения для перезагрузки ярлыков:

for short in owner.shortcut_list:
    owner.removeAction(short)

Как видите, у меня есть два не очень похожих ярлыка "Q, R" и "Q, R, 1", где при использовании последовательности "Q, R, 1" запускается ярлык "Q, R", и он не читает следующее ход клавиш ("Q, R, 1" не работает). Я думаю, что документы сказали, что это немедленно сработает, если он обнаружит, что это правильная последовательность.

Что мне делать в этой ситуации? Предпочтительным решением является сделать QAction дождитесь паузы в нажатии клавиш, затем прочитайте любую последовательность, которую получили. Как заставить оба этих ярлыка работать?

РЕДАКТИРОВАТЬ

Использование кода QShortcut

result = [["path\\to\\foler", "Q, R"], ["path\\to\\file.ext", "Q, R, 1"]]
for data in result:
    if os.path.exists(data[0]):
        shortcut = QShortcut(QKeySequence(book[1]), owner)
        lambda_func = lambda w=path: func_to_open(w)

        #Does Not Trigger, What is wrong?(Nothing happens)
        shortcut.activatedAmbiguously.connect(lambda_func)
        owner.shortcut_list += [[shortcut, lambda_func]]

Метод отключения (не работает, выдает ошибку в activ ())

 for short in owner.shortcut_list:
    short[0].activatedAmbiguously.disconnect() #or short[0].activatedAmbiguously.disconnect(short[1])
    short[0].deleteLater()

Ошибка activ.disconnect():

disconnect failed bwtween activated and all of its connections

Ошибка activ.disconnect(short[1])

function is not connected

0 ответов

Другие вопросы по тегам