Как назначить ключи переменным в 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 Ученик, динамически назначать ярлык
Пожалуйста, редактировать свой вопрос, чтобы объяснить его более подробно.
@Code-Apprentice, нужно программно назначать ярлыки. если пользователю нужно изменить сочетание клавиш с клавиши по умолчанию на желаемую клавишу. Спасибо за решение
@Code-Apprentice, добавьте полный подробный сценарий в мои правки
Я предлагаю вам узнать о разнице между строками и именами переменных.
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 смотрите мое обновление
Отступим на шаг. почему ты хочешь сделать это? Какую реальную проблему вы пытаетесь решить?