Как назначить ключи переменным в pyqt5?

Как назначить ключи переменным в pyqt5?

def keyPressEvent(self, event):
    var = "Qt.Key_F"
    if event.key() == var:
        print("you press key F")

Редактировать-: Для большего количества четких картинок добавьте следующий скрипт. В моем коде первое и второе событие производят желаемый результат и печатают результат. Но третье событие, которое назначается/получается из словаря (Alt+Z), не производит/не печатает никаких результатов. Как это решить?

import sys

from PyQt5.QtCore import *
from PyQt5.QtWidgets import *

dict_scut = {
    "eng":{ "A": "Qt.Key_A", "B": "Qt.Key_B","C": "Qt.Key_C","D": "Qt.Key_D","E": "Qt.Key_E","F": "Qt.Key_F",
            "G": "Qt.Key_G", "H": "Qt.Key_H","I": "Qt.Key_I","J": "Qt.Key_J","K": "Qt.Key_K","L": "Qt.Key_L",
            "M": "Qt.Key_M", "N": "Qt.Key_N","O": "Qt.Key_O","P": "Qt.Key_P","Q": "Qt.Key_Q","R": "Qt.Key_R",
            "S": "Qt.Key_S", "T": "Qt.Key_T","U": "Qt.Key_U","V": "Qt.Key_V","W": "Qt.Key_W","X": "Qt.Key_X",
            "Y": "Qt.Key_Y", "Z": "Qt.Key_Z","None":""}
             }

dict_modi = {"None":" ","alt":"Qt.AltModifier","ctrl":"Qt.ControlModifier","shift":"Qt.ShiftModifier",
             "altctrl":"Qt.AltModifier|Qt.ControlModifier","altshift":"Qt.AltModifier|Qt.ShiftModifier",
             "ctrlshift":"Qt.ControlModifier|Qt.ShiftModifier",
             "altctrlshift":"Qt.AltModifier|Qt.ControlModifier|Qt.ShiftModifier"}

class Dynamic_shortcut(QWidget):
    def __init__(self):
        super(). __init__()
        self.setWindowTitle("Dynamic Widget")

        self.var_modi_1 = Qt.AltModifier
        self.var_scut_1 = Qt.Key_A

        user1_modi = "alt"
        user1_scut = "Z"
        self.var_modi_2 = dict_modi.get(user1_modi)
        self.var_scut_2 = dict_scut['eng'].get(user1_scut)

    def keyPressEvent(self, event):
        if event.modifiers() == Qt.AltModifier and event.key() == Qt.Key_Q:
            print("Pressed key : Alt + Q")
        if event.modifiers() == self.var_modi_1 and event.key() == self.var_scut_1:
            print("Pressed key : Alt + A")
        if event.modifiers() == self.var_modi_2 and event.key() == self.var_scut_2:
            print("pressed key : Alt + Z")

def main():
    app = QApplication(sys.argv)
    ex = Dynamic_shortcut()
    ex.show()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()

Отступим на шаг. почему ты хочешь сделать это? Какую реальную проблему вы пытаетесь решить?

Code-Apprentice 17.05.2022 07:36

@code Ученик, динамически назначать ярлык

tckraomuqnt 17.05.2022 07:38

Пожалуйста, редактировать свой вопрос, чтобы объяснить его более подробно.

Code-Apprentice 17.05.2022 07:39

@Code-Apprentice, нужно программно назначать ярлыки. если пользователю нужно изменить сочетание клавиш с клавиши по умолчанию на желаемую клавишу. Спасибо за решение

tckraomuqnt 17.05.2022 07:42

@Code-Apprentice, добавьте полный подробный сценарий в мои правки

tckraomuqnt 17.05.2022 14:54

Я предлагаю вам узнать о разнице между строками и именами переменных.

Code-Apprentice 17.05.2022 16:53
Анализ настроения постов в Twitter с помощью Python, Tweepy и Flair
Анализ настроения постов в Twitter с помощью Python, Tweepy и Flair
Анализ настроения текстовых сообщений может быть настолько сложным или простым, насколько вы его сделаете. Как и в любом ML-проекте, вы можете выбрать...
7 лайфхаков для начинающих Python-программистов
7 лайфхаков для начинающих Python-программистов
В этой статье мы расскажем о хитростях и советах по Python, которые должны быть известны разработчику Python.
Установка Apache Cassandra на Mac OS
Установка Apache Cassandra на Mac OS
Это краткое руководство по установке Apache Cassandra.
Сертификатная программа "Кванты Python": Бэктестер ансамблевых методов на основе ООП
Сертификатная программа "Кванты Python": Бэктестер ансамблевых методов на основе ООП
В одном из недавних постов я рассказал о том, как я использую навыки количественных исследований, которые я совершенствую в рамках программы TPQ...
Создание персонального файлового хранилища
Создание персонального файлового хранилища
Вы когда-нибудь хотели поделиться с кем-то файлом, но он содержал конфиденциальную информацию? Многие думают, что электронная почта безопасна, но это...
Создание приборной панели для анализа данных на GCP - часть I
Создание приборной панели для анализа данных на GCP - часть I
Недавно я столкнулся с интересной бизнес-задачей - визуализацией сбоев в цепочке поставок лекарств, которую могут просматривать врачи и...
1
6
28
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

var = "Qt.Key_F"

Это присваивает строку переменной. Эта строка не имеет ничего общего с Qt или «ключами». Я думаю, что вместо этого вы хотите

var = Qt.Key_F

Но в этом нет необходимости, так как Key_F уже является переменной. Вы можете использовать его напрямую:

if event.key() == Qt.Key_F:
Ответ принят как подходящий

Я думаю, что это проблема XY. Ваша цель — определить, какая буква нажата, и выполнить какое-либо действие, если оно соответствует значению переменной, если это так, решение состоит в использовании event.text():

def keyPressEvent(self, event):
    v = "F"
    if event.text() == var:
        # OR
        # if event.text().upper() == var:
        print("you press key F")

Вы усложняете себе работу, в Qt уже есть классы, позволяющие обрабатывать эту логику по-простому через QKeySequence и QShortcut:

from PyQt5.QtCore import Qt
from PyQt5.QtGui import QKeySequence
from PyQt5.QtWidgets import QApplication, QShortcut, QWidget


class Widget(QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)

        keysequence1 = QKeySequence("ALT+A")
        # OR
        # keysequence1 = QKeySequence(Qt.ALT + Qt.Key_A)
        shorcut1 = QShortcut(keysequence1, self, activated=self.handle_activated)

        keysequence2 = QKeySequence("alt+z")
        # OR
        # keysequence1 = QKeySequence(Qt.ALT + Qt.Key_Z)
        shorcut2 = QShortcut(keysequence2, self, activated=self.handle_activated)

    def handle_activated(self):
        self.do_task()

    def do_task(self):
        print("Qt is Awesome!!!")


def main():
    app = QApplication([])

    w = Widget()
    w.show()

    app.exec_()


if __name__ == "__main__":
    main()

Если вы хотите иметь более удобную для пользователя среду для установки QKeySequence, вы можете использовать QKeySequenceEdit.

Мне нужно назначить ярлык программно. Например, если пользователь1 использует «Alt + A» в качестве сочетания клавиш для кнопки 1, но пользователю 2 не нравится сочетание клавиш «Alt + A», и ему нужно изменить «Alt + S» в качестве сочетания клавиш для той же кнопки.

tckraomuqnt 17.05.2022 14:14

Для более четкой картины добавляйте подробный скрипт в мои правки

tckraomuqnt 17.05.2022 14:56

@tckraomuqnt смотрите мое обновление

eyllanesc 17.05.2022 15:13

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