我正在嘗試使用以下方法逐步減去在按鈕中顯示為文本的數字,但無法將其更新到 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()
uj5u.com熱心網友回復:
問題是因為您的函式不會更改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()
更好的方法是使用 tkinterIntVar類的實體并將其設為Label's textvariable,這樣每次IntVar更改 's 值時標簽都會自動更新。
# 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()
uj5u.com熱心網友回復:
您總是將相同的數字傳遞給您的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)
uj5u.com熱心網友回復:
嘗試這個:
# 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://www.uj5u.com/ruanti/323749.html
