2016-01-20 17 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() 
相關問題