2014-02-26 30 views
1

輸入數據到Entry小部件嗨,我試圖創建一個簡單的觸摸屏界面,允許用戶輸入4位代碼到條目小部件,然後將其保存到字符串。我不確定如何做到以下幾點: 當按鈕被按下輸入該值裝入輸入構件 這裏是我的代碼,到目前爲止,但我得到以下錯誤:從按鈕

AttributeError: 'NoneType' object has no attribute 'insert'

def lockscreen(): 
    locks = Toplevel(width=500,height=500) 
    locks.title('Lock Screen') 
    L1 = Label(locks,text="Enter 4 Digit Lock Code").grid(row=1,column=1,columnspan=3) 
    e1=Entry(locks, bd=5).grid(row=2,column=1,columnspan=3) 


    Button(locks, width=3, height=3, text='1', command =lambda:screen_text("1")).grid(row=3,column=1)   
    Button(locks, width=3, height=3, text='2').grid(row=3,column=2) 
    Button(locks, width=3, height=3, text='3').grid(row=3,column=3) 
    Button(locks, width=3, height=3, text='4').grid(row=4,column=1) 
    Button(locks, width=3, height=3, text='5').grid(row=4,column=2) 
    Button(locks, width=3, height=3, text='6').grid(row=4,column=3) 
    Button(locks, width=3, height=3, text='7').grid(row=5,column=1) 
    Button(locks, width=3, height=3, text='8').grid(row=5,column=2) 
    Button(locks, width=3, height=3, text='9').grid(row=5,column=3) 
    Button(locks, width=3, height=3, text='Close').grid(row=6,column=1) 
    Button(locks, width=3, height=3, text='0').grid(row=6,column=2) 
    Button(locks, width=3, height=3, text='Enter').grid(row=6,column=3) 

    def screen_text(text): 
     e1.insert(0,text) 
     return 



master.mainloop() 

回答

1

問題是這樣的行:

e1=Entry(locks, bd=5).grid(row=2,column=1,columnspan=3) 

通過鏈接條目()構造函數和網格()調用在一起,你實際上是存儲grid()呼叫e1,而不是輸入字段的結果。要解決:

e1=Entry(locks, bd=5) 
e1.grid(row=2,column=1,columnspan=3) 

注:

  • 您有變量L1
  • 你也可以將命令添加到您的其他按鈕也

憑藉解決相同的問題來自評論的新問題你的代碼變得像這樣:

def lockscreen(): 
    locks = Toplevel(width=500,height=500) 
    locks.title('Lock Screen') 
    L1 = Label(locks,text="Enter 4 Digit Lock Code") 
    L1.grid(row=1,column=1,columnspan=3) 
    e1=Entry(locks, bd=5) 
    e1.grid(row=2,column=1,columnspan=3) 

    def screen_text(text): 
     e1.insert(0,text) 

    Button(locks, width=3, height=3, text='1', 
      command=lambda:screen_text("1")).grid(row=3,column=1)   
+0

多數民衆贊成解決這個問題,現在我有以下錯誤。 NameError:全局名稱'e1'未定義 是因爲我已經用lockscreen()定義它,現在我正試圖從另一個def中調用它? – user2996828

+1

是的,但由於你的縮進方式在你的例子中,我沒有注意到。嘗試在創建按鈕之前將'screen_text'函數定義移動到* lockscreen函數內*。或完全擺脫screen_text()函數,如我最近的編輯所示。 – mshildt

+0

按鈕調用函數而不是在lambda中嵌入語句會更好。這樣,如果gui更改爲使用其他類型的小部件,則只需更改該功能而不是每個按鈕。 –