2017-02-09 30 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

非常感谢您的回答!我会再试一次非常感谢! –