2016-01-20 69 views
0

我正在编写一个心理学实验的程序,要求参与者学习一个新的数字键盘映射。如何使用数字作为变量名,或者使用dict来代替?

钥匙是否被封这将是很容易的: a=1b=2c=3

但很显然的Python不允许映射为整数。嗯。

的部分解决方案是使用字典,如:

newdict = {'1': 9, '2': 8, '3': 7} 

然而,参与者会打字到一个文本框,当他们的条目显示在框中,它需要已经被转换。没有明确的方法来应用newdict['1']呼叫。

这个重新映射如何完成?

+0

您的意思是,例如,映射'a'和'newdict ['1']''。所以当你运行'a = 1'时,然后把'newdict ['1']'改为'1'? –

+0

您需要大量修改文本框,以便修改任何输入。既然你没有告诉我们你正在使用哪一个GUI工具包,我们无法帮助你。告诉我们您使用的是哪个GUI工具包(和[提供您当前的代码](http://sscce.org/)),以便我们可以帮助您。无论如何,只需简单地捕获键盘按键并将结果输出到不可写入的文本显示中可能更为明智。 – phihag

+0

@凯文:理想情况下,主题将输入1,文本框将显示9(或你有什么)。我不知道如何从键入“旧”号码(即1)并显示“新”号码(即9)的主题实时翻译。那有意义吗? “a = 1”是我的一个不好的例子,因为我根本不想重新映射字母。 – adyo4552

回答

1

你本能地使用字典是很好的 - 这是一个简单的方法来创建从一个字符到另一个字符的映射。你也可以使用元组列表(例如:((1, 9), (2, 8), ...)

你没有提到GUI工具包(或者你是否只是在做一个控制台应用程序),所以我将举一个tkinter例子来说明使用字典为每个密钥设置密钥绑定。使用元组将几乎相同。

import tkinter as tk # for python 2 use 'Tkinter' 

class Example(tk.Frame): 
    keymap = {'1': '9', '2': '8', '3': '7', 
       '4': '6', '5': '5', '6': '4', 
       '7': '3', '8': '2', '9': '1'} 

    def __init__(self, parent): 
     tk.Frame.__init__(self, parent) 

     self.entry = tk.Entry(self, width=20) 
     self.entry.pack(fill="x", pady=20, padx=20) 

     for old_key, replacement in self.keymap.items(): 
      self.entry.bind('<KeyPress-%s>' % old_key, 
          lambda event, char=replacement: self.insert(char)) 

    def insert(self, char): 
     self.entry.insert("insert", char) 
     return "break" 

if __name__ == "__main__": 
    root = tk.Tk() 
    Example(root).pack(fill="both", expand=True) 
    root.mainloop() 
相关问题