我试图让下面的方法增量地减去按钮中显示为文本的数字,但不能让它更新到4以下。
def waterclick(watercount = 5):
water = watercount - 1
waterlabel.config(text = water)
print(water)
完整代码:
# importing whole module
from tkinter import *
from tkinter import ttk
root = Tk()
#name of the program
label = ttk.Label(root, text = '.0.')
label.grid(row = 0, column = 0)
label.config(text = "Howdy Tkinter")
label.config(foreground = 'white', background = 'black', font = ('impact', 14))
#increments water count by -1
def waterclick(watercount = 5):
water = watercount - 1
waterlabel.config(text = water)
print(water)
#water button
waterlabel = ttk.Button(root, text = 5, command = waterclick)
waterlabel.grid(row = 0, column = 1, columnspan = 2)
mainloop()
发布于 2021-10-16 08:57:06
问题在于您的函数没有更改watercount
的值,它是函数参数的名称。最简单的解决方法是使用全局变量。这种做法是这样的:
# importing whole module
from tkinter import *
from tkinter import ttk
root = Tk()
#name of the program
label = ttk.Label(root, text = '.0.')
label.grid(row = 0, column = 0)
label.config(text = "Howdy Tkinter")
label.config(foreground = 'white', background = 'black', font = ('impact', 14))
#increments water count by -1
def waterclick():
global watercount
watercount -= 1 # Update value of global variable.
waterlabel.config(text=watercount)
print(watercount)
#Define global variable.
watercount = 5
#water button
waterlabel = ttk.Button(root, text = 5, command = waterclick)
waterlabel.grid(row = 0, column = 1, columnspan = 2)
mainloop()
一种稍微好一些的方法是使用tkinter IntVar
类的一个实例,并使其成为Label
的textvariable
,这样,每当IntVar
的值发生变化时,标签就会自动更新。
# importing whole module
from tkinter import *
from tkinter import ttk
root = Tk()
#name of the program
label = ttk.Label(root, text = '.0.')
label.grid(row = 0, column = 0)
label.config(text = "Howdy Tkinter")
label.config(foreground = 'white', background = 'black', font = ('impact', 14))
#increments water count by -1
def waterclick():
watercount.set(watercount.get()-1) # Update value of tkinter variable.
print(watercount.get())
#Define tkinter Variable.
watercount = IntVar(value=5)
#water button
waterlabel = ttk.Button(root, textvariable = watercount, command = waterclick)
waterlabel.grid(row = 0, column = 1, columnspan = 2)
mainloop()
发布于 2021-10-16 08:56:06
您总是将相同的数字传递给您的waterclick
函数,因此它总是从5中减去1,因此得到4。
解决这个问题的方法是实际读取每次调用waterclick
时在文本中显示的数字,并从该数字中减去它。
要获得按钮中显示的当前数字,您可以使用waterlabel['text']
,就像使用Tkinter中的任何其他属性一样。
您的代码将以这样的方式结束:
#increments water count by -1
def waterclick():
water = waterlabel['text'] - 1
waterlabel.config(text = water)
print(water)
#water button
waterlabel = ttk.Button(root, text = 5, command = waterclick)
waterlabel.grid(row = 0, column = 1, columnspan = 2)
发布于 2021-10-16 09:03:23
试试这个:
# importing whole module
from tkinter import *
from tkinter import ttk
root = Tk()
#name of the program
label = ttk.Label(root, text = '.0.')
label.grid(row = 0, column = 0)
label.config(text = "Howdy Tkinter")
label.config(foreground = 'white', background = 'black', font = ('impact', 14))
#increments water count by -1
def waterclick():
water = waterlabel.cget("text") - 1
waterlabel.config(text = water)
print(water)
#water button
waterlabel = ttk.Button(root, text = 5, command = waterclick)
waterlabel.grid(row = 0, column = 1, columnspan = 2)
mainloop()
https://stackoverflow.com/questions/69597623
复制相似问题