2017-05-31 20 views
1

問題のコードはかなり大きいので、私はここで指図バージョンを作成しています。変数をtkinterのボタンで変更してください

import tkinter 

variable = "data" 

def changeVariable(): 
    variable = "different data" 

def printVariable(): 
    print(variable) 

window = tkinter.Tk 
button1 = tkinter.Button(window, command=changeVariable) 
button1.pack() 
button2 = tkinter.Button(window, command=printVariable) 
button2.pack() 

この例では、最初のボタンを押して「変数」を変更し、次に2番目のボタンを押して変更します。しかし、 "異なるデータ"の代わりに "データ"が印刷されます。私はちょっと調べて、グローバルを使う前に、メインコードと関数の両方で変数を定義することにしました。

import tkinter 

global variable 
variable = "data" 

def changeVariable(): 
    global variable 
    variable = "different data" 

def printVariable(): 
    global variable 
    print(variable) 

window = tkinter.Tk() 
button1 = tkinter.Button(window, command=changeVariable) 
button1.pack() 
button2 = tkinter.Button(window, command=printVariable) 
button2.pack() 

window.mainloop() 

これで、 'name'変数は '定義されていません'と表示されます。

本質的に、変数「変数」をtkinterのボタンで変更するにはどうすればよいですか? グローバルを使うと間違っていましたか?

+1

私は最初の 'グローバル変数'は必要ないと思います。 – quamrana

+0

あなたのコードは私のために働く。あなたはどこかで "変数"のスペルを間違えていませんでしたか? – Novel

+0

2つ目の例では、 'window = tkinter.Tk()'と最後に 'window.mainloop()'を追加しています。 – FamousJameous

答えて

1

グローバルの使用は少しオフです。場所全体をグローバルに定義する必要はありません。それをちょっと解き放つことができます。

グローバル名前空間でグローバル名前空間を定義する必要はありません。

from tkinter import * 
window = Tk() 
myvar = "data" # this variable is already in the global namespace 

これは、グローバルな名前空間をチェックする機能を指示する際に、変数myvarとの相互作用。

def changeVariable(): 
    global myvar 
    myvar = "different data" 

それは変数myvarを見つけることなく、他の名前空間を確認した後、それがグローバル変数の名前空間をチェックするため、このprint文は動作します。

def printVariable(): 
    print(myvar) 

button1 = Button(window, command = changeVariable) 
button1.pack() 
button2 = Button(window, command = printVariable) 
button2.pack() 

window.mainloop() 

このコードをまとめると、望ましい結果が得られます。我々は再びまず下のボタンを一番上のボタンを下のボタンを押して、我々が取得する場合

enter image description here

と結果:

from tkinter import * 
window = Tk() 
variable = "data" 

def changeVariable(): 
    global variable 
    variable = "different data" 

def printVariable(): 
    print(variable) 

button1 = Button(window, command = changeVariable) 
button1.pack() 
button2 = Button(window, command = printVariable) 
button2.pack() 

window.mainloop() 

これは、このようになりますウィンドウに結果

enter image description here

関連する問題