2017-02-09 4 views
1

編集:私は、この記事に関連したエラーなどを修正しましたが、今は元々進んでいた高度な機能を実現しようとしています。今回私はディスプレイとディスプレイ機能を持っています。ボタンは、ディスプレイにテキストを挿入することによって更新機能を呼び出す。私はこの機能をどのように使うことができるのだろうかと疑問に思っていた。textvariable =は、ボタンのテキストを1、2、3、4 ... 9、0からA、B、C、Dに変えることができる。 J.私のコードは以下の通りです。 commandパラメータに値を提供する場合:)先進の電卓は、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

、あなたはそれに関数名を与えることによって、それをあなたの関数への参照を与える必要があります。

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

ありがとうございました!私はそれをショットを与えるだろう非常に再びありがとう! –

関連する問題