在另一个函数中更改函数内部的变量

时间:2017-08-07 14:01:26

标签: python tkinter

如何在第二个函数中更改第一个函数中变量的值?

这是我到目前为止所提出的。 我想从以下内容中添加或减去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()

2 个答案:

答案 0 :(得分: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 :(得分: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的更多信息。