2017-08-07 14 views
1

2番目の関数内から最初の関数内の変数の値を変更するにはどうすればよいですか?関数内の変数を別の関数から変更する

これまで私が思いついたのはこれです。 私は1を加算または減算しようとしています: self.num = 0

しかし、加減算しません。

from tkinter import * 


class Application(): 
    def __init__(self, master): 
     print("Initialization") 

     self.frame = Frame(master, width=800, height=600) 
     self.frame.pack() 

     # I want to initialize self.num as 0 
     self.num = 0 

     # Call calc funtion 
     self.calc() 

    def calc(self): 
     # Subtract number 
     self.subButton = Button(self.frame, text="-", command=self.subNum) 
     self.subButton.grid(row=0, column=0) 

     # Add number 
     self.addButton = Button(self.frame, text="+", command=self.addNum) 
     self.addButton.grid(row=0, column=2) 

     # Display the number 
     self.numText = Label(self.frame, text=self.num) 
     self.numText.grid(row=0, column=1) 

     # Break mainloop. Quit Program 
     self.quitButton = Button(self.frame, text="Quit", command=self.frame.quit) 
     self.quitButton.grid(row=3, column=0) 

    # Here I add 1 to self.num 
    def addNum(self): 
     self.num += 1 
     print("Add") 
    # Here I subtract 1 from self.num 
    def subNum(self): 
     self.num -= 1 
     print("Subtract") 


root = Tk() 
app = Application(root) 
root.mainloop() 

答えて

4

self.numの値を変更していますが、ラベルのテキストは変更されていません。

IntVarを使用して自動的に変更されるか、手動で変更することができます。個人的には、この場合はIntVarが好きです。

class Application(): 
    def __init__(self, master): 
     self.num = IntVar(value=0) 

    def calc(self): 
     .... 
     self.numText = Label(self.frame, textvariable=self.num) 
     #use textvariable instead of text option 

    def addNum(self): 
     #to change value, you should use set/get methods of IntVar 
     self.num.set(self.num.get() + 1) 

あなたはIntVar()を使用したくない場合は、あなたが

def addNum(self): 
    self.num += 1 
    self.numText["text"] = self.num 
    #or 
    #self.numText.config(text=self.num) 
    print("Add") 
+1

これは完全に機能します:) 私は両方の方法を試してみましたが、Intvarを使用しないほうが好まれます。 ありがとうございます。 –

1

を使用することができます問題は、ラベルが変数ではなく、変化しないことです。ラベルを更新する場合は、textvariableプロパティを使用し、クラス内のtkinterのIntVarを初期化する必要があります。方法は次のとおりです。

def __init__(self, master): 
    print("Initialization") 

    self.frame = Frame(master, width=800, height=600) 
    self.frame.pack() 

    # I want to initialize self.num as 0 
    self.num = IntVar() 

    # Call calc funtion 
    self.calc() 

self.numの宣言に注意してください。

次に、ここでラベルが宣言されるべき方法は次のとおりです。

self.numText = Label(self.frame, textvariable=self.num) 
    self.numText.grid(row=0, column=1) 

を今、IntVarを修正するために、あなたは、単にそれに値を割り当てることができないとして、あなたは、そのget()set()メソッドを使用する必要があります。

# Here I add 1 to self.num 
def addNum(self): 
    self.num.set(self.num.get() + 1) 
    print("Add") 
# Here I subtract 1 from self.num 
def subNum(self): 
    self.num.set(self.num.get() - 1) 
    print("Subtract") 

tkinterの変数クラスhereで詳しく読むことができます。

関連する問題