2017-02-09 29 views
1

編輯:我修正了這篇文章所關注的錯誤等,現在我嘗試了一種不同的方式來實現我最初使用的高級功能。這次我有一個顯示屏和一個顯示功能。按鈕通過將文本插入到所述顯示器中來調用更新功能。我想知道如何使用此功能,也許textvariable =,這樣我就可以將按鈕的文本從1,2,3,4 ... 9,0改爲A,B,C,D ... I, J.我的代碼如下,任何幫助將不勝感激。 :)高級計算器功能Tkinter的GUI和可變的錯誤

from tkinter import * 
import time 

root = Tk() 
root.title('Calculator') 



displayb = Entry(root) 
displayb.grid(row = 1, columnspan = 6) 


mode = 0 

i = 0 


'''def update(): 
    global mode 
    if mode == 0: 
     mode = 1 
    else: 
     mode = 0 
    return''' 
def display(e): 
    global i 
    displayb.insert(i,e) 
    i += 1 

txt1 = StringVar() 
a = '1' if mode == 0 else 'A' 
one = Button(root, text = '1', command = lambda : display(1)) 
txt1.set(a) 
one.grid(row = 2, column = 0) 
two = Button(root, text = '2', command = lambda : display(2)) 
two.grid(row = 2, column = 1) 
three = Button(root, text = '3', command = lambda : display(3)) 
three.grid(row = 2, column = 2) 
four = Button(root, text = '4', command = lambda : display(4)) 
four.grid(row = 3, column = 0) 
five = Button(root, text = '5', command = lambda : display(5)) 
five.grid(row = 3, column = 1) 
six = Button(root, text = '6', command = lambda : display(6)) 
six.grid(row = 3, column = 2) 
seven = Button(root, text = '7', command = lambda : display(7)) 
seven.grid(row = 4, column = 0) 
eight = Button(root, text = '8', command = lambda : display(8)) 
eight.grid(row = 4, column = 1) 
nine = Button(root, text = '9', command = lambda : display(9)) 
nine.grid(row = 4, column = 2) 
zero = Button(root, text = '0', command = lambda : display(0)) 
zero.grid(row = 5, column = 1) 
'''shift = Button(root, text = 'sft', command = lambda : mode = 1 if mode == 0 else 0) 
shift.grid(row = 2, column = 1)''' 


root.mainloop() 

回答

2

當提供command參數的值,你需要只是付出的函數名給它的函數的引用。

shift = Button(root, text = 'sft', command = update()) 

這裏您有()在它的末尾,這是調用您的功能。刪除()或使用lambda,就像您之前所做的那樣。現在

,你得到你是錯誤的原因是因爲modeglobal變量,你update功能外定義。所以,如果你要更新的變量,那麼你需要讓它知道modeglobal

def update(): 
    global mode 
    if mode == 0: 
     mode = 1 
    else: 
     mode = 0 
    return mode 

還要注意的是,除非你會在其他地方調用這個函數,你不能檢索按下按鈕的返回值。

有關global and local scope的更多信息。

+0

非常感謝您的回答!我會再試一次非常感謝! –