Python 3.x 从';a';至PyQt5中的Qt.Key_A

Python 3.x 从';a';至PyQt5中的Qt.Key_A,python-3.x,pyqt5,Python 3.x,Pyqt5,我确信这是基本的,但我已经搜索过了,结果空手而归。 我正在使用Python 3.6.4和PyQt5 我想在配置文件中存储一些自定义操作键(通过configparser),然后检索它们并响应按键事件。 基本上,我在PyQt5中寻找一个函数,它执行chr(Qt.Key\u a)-从一个字符开始,返回一个Qt.Key. 这一次我忍不住用谷歌搜索,PyQt5非常值得一读。我想知道是否有人能给我指出正确的方向。 我可以使用dict,但我确信一定有一个函数可以做到这一点——我只是找不到它 我的解决方案是使用

我确信这是基本的,但我已经搜索过了,结果空手而归。
我正在使用Python 3.6.4和
PyQt5

我想在配置文件中存储一些自定义操作键(通过
configparser
),然后检索它们并响应按键事件。
基本上,我在PyQt5中寻找一个函数,它执行
chr(Qt.Key\u a)
-从一个字符开始,返回一个Qt.Key.
这一次我忍不住用谷歌搜索,PyQt5非常值得一读。我想知道是否有人能给我指出正确的方向。

我可以使用dict,但我确信一定有一个函数可以做到这一点——我只是找不到它

我的解决方案是使用
ord()
将密钥存储为ASCII码,因为它们可以直接与
Qt进行比较。密钥对象:

from PyQt5.QtCore import Qt
ord('A') == Qt.Key_A
Out[2]: True

如果我们只讨论字母数字键,
getattr(Qt,f“Key{Key.upper()}”
应该可以工作

from PyQt5.QtCore import Qt

def string_to_key_converter(s):
    attribute = f"Key_{s.upper()}"
    if hasattr(Qt, attribute):
        return getattr(Qt, attribute)
    else:
        raise ValueError(f"Key {s} is invalid or unsupported.")

> string_to_key_converter("a") is Qt.Key_A
>>> True

QKeySequence('Ctrl+A')
@ekhumoro谢谢……这是一个很好的解决办法,但我希望得到一个
PyQt5.QtCore.Qt.Key
对象,以保持整洁。QKeySequence会给我一个
PyQt5.QtGui.QKeySequence
对象,我可以使用它,但是,这只是比使用dict好一步。但这是一个很好的提示,我会检查是否有办法来解决这个问题从那里获取一个
.Key
对象。这不是一个解决办法。它是管理快捷键组合的工具。我认为您没有注意到
QKeySequence
为定义为字符串的人类可读键序列提供了一个往返解析器(这对于保存在配置文件中是绝对完美的)。相比之下,您正试图硬编码不透明的枚举值,而这些值没有保证固定值。因此,您尝试的解决方案看起来像是解决方案—尽管您实际试图解决的问题尚不清楚。@ekhumoro这确实是我第一次使用PyQt进行竞技表演。遗憾的是,这不是正确的媒介,否则我将我会从你身上读到更多的东西……不过,我会更好地教育自己。但简言之,我认为由于每次按键事件都会产生一个
Key
对象,而我只会加载一次配置,那么如果我将配置转换成
Key
对象,我就不必再执行任何转换调用,例如从
Key
QKeySequence
。我看到了你的答案,而且我也很理解这个想法,在处理这个问题的方式上,我肯定遗漏了一些东西。我会四处看看,谢谢。