2017-07-29 18 views
0
from tkinter import* 
hp = 10 
def inc(): 
    global hp 
    hp+=2 
    mainloop() 
def dec(): 
    global hp 
    hp-=2 
    mainloop() 
master=Tk() 
w = Label(master, text="Health = " + str(hp)) 
bu = Button(master, text="Increase", command=inc) 
bd = Button(master, text="Decrease", command=dec) 
bu.pack() 
bd.pack() 
w.pack() 
while True: 
    mainloop() 

値を変更するボタンウィジェットをクリックすると、整数変数 'hp'を表示するラベルが更新されます。なぜそれはさわやかではないのですか?定義ビットをtkビットの下に置くと、ボタンのコマンドが存在しないというエラーが表示されます。Tkラベルウィジェットがリフレッシュしない

答えて

0

1つは、mainloop()を正確に1回呼び出す必要があります。無限ループではありません。

別の場合、ラベルは魔法のように更新されるだけではありません。ラベルウィジェットに表示される文字列を変更するには、configメソッドを使用する必要があります。

0

関数mainloop()はループそのものです(ヒントは名前にあります)ので、無限ループで呼び出さないようにしてください。これにより、問題の一部が修正されます。

また、最初にラベルを作成したときにテキストが変更され、テキストが設定されているため、hpを変更しても文字列は変更されないため、テキストを変更するためにはw.config(text="somenewlabeltext")をinorderで使用する必要があります。

あなたの最終的なコードは次のようになります。

from tkinter import * 

hp = 10 

def inc(): 
    global hp, w 
    hp+=2 
    w.config(text="Health = " + str(hp)) 

def dec(): 
    global hp, w 
    hp-=2 
    w.config(text="Health = " + str(hp)) 

master=Tk() 

w = Label(master, text="Health = " + str(hp)) 
w.pack() 

bu = Button(master, text="Increase", command=inc) 
bu.pack() 

bd = Button(master, text="Decrease", command=dec) 
bd.pack() 

mainloop() 
関連する問題