如何在第二个函数中更改第一个函数中变量的值?
这是我到目前为止所提出的。 我想从以下内容中添加或减去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()
答案 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的更多信息。