![](/img/trans.png)
[英]Multiple Buttons to change the colours of multiple labels TKINTER, PYTHON?
[英]Tkinter change number in multiple labels
我正在制作一個程序,讓用戶輸入花卉類型,它將創建一個新行,其中包含行號、名稱和死亡前剩余的天數。 目前用戶界面有點混亂,代碼可以改進很多,但這不是重點。 我想知道我將如何制作多個新標簽,我可以通過單擊按鈕更改剩余天數。
到目前為止,這是我的代碼:
它運行正常,但只能更改最新制作的行,這是因為每次制作時,最后一行都無法再編輯,這就是我想要更改的內容。
from tkinter import *
#Flower Types
flowers_days = {
"peony": 1,
"rose": 2,
"daffodil": 3,
"dandelion": 4,
"lavender": 5
}
day_change = {}
#Variables
day = 1
days_left = 5
row_Num = 0
name = ""
#Commands
def new_flower():
#make a new line with the new flower
global row_Num
global days_left
global name
global new_row
row_Num += 1
name = str(clicked.get())
print("Test:" + name)
days_left = flowers_days[clicked.get()]
day_change[days_left] = int(row_Num)
new_row = Label(main_Frame, text=str(row_Num)+" "+name+" " + str(days_left))
new_row.pack()
return new_row
def next_day():
global days_left
global name
days_left -= 1
new_row.config(text=str(row_Num)+" "+name+" " + str(days_left))
root = Tk()
new_row = Label()
clicked = StringVar()
clicked.set("No option Selected")
#FLOWER TYPE
flower_Type_Frame = LabelFrame(root, text="New Flowers", padx=5, pady=5)
flower_Type_Frame.grid(row=0, rowspan=4, column=0, columnspan=2, padx=10, pady=10)
flower_Type_Label = Label(flower_Type_Frame, text="Flower Type:")
flower_Type_Label.grid(row=0, column=0, columnspan=2, padx=5, pady=5)
flower_Type_Drop = OptionMenu(flower_Type_Frame, clicked, """
No option Selected
""", "peony", "rose", "daffodil", "dandelion", "lavender")
flower_Type_Drop.grid(row=1, column=0, columnspan=2, pady=5, padx=5)
flower_Type_Submit = Button(flower_Type_Frame, text="Submit", padx=10, pady=10, command=new_flower)
flower_Type_Submit.grid(row=2, column=0, columnspan=2, rowspan=2)
#Empty slot
space_Frame = LabelFrame(root, text="Empty", padx=5, pady=5)
space_Frame.grid(row=0, rowspan=4, column=3, columnspan=2, padx=10, pady=10)
space_Fill = Label(space_Frame, text="Space ").grid(row=0, column=0)
#Day Pass
day_Pass_Frame = LabelFrame(root, text="Day Pass", padx=5, pady=5)
day_Pass_Frame.grid(row=0, rowspan=2, column=6, columnspan=4, padx=10, pady=10)
day_Pass = Button(day_Pass_Frame, text="Next Day", padx=10, pady=10, command=next_day)
day_Pass.grid(row=0, rowspan=2, column=3, columnspan=2)
#Row Delete
#Main stuff
main_Frame = LabelFrame(root, text="Flowers In Stock", padx=5, pady=5)
main_Frame.grid(row=5, column=0, columnspan=7, padx=10, pady=10)
header = Label(main_Frame, text=" Row # / Flower Type / Days Remaining ", padx=5, pady=5)
header.pack(padx=5, pady=5)
root.mainloop()
排序完成后,我還計划讓它有一個刪除行按鈕,因此如果可能的話,行號也需要能夠更改。
謝謝你的幫助。
您只保留一個“days_left”信息(在全局變量中),但您需要為每朵花保留一個。 因此,您的主要數據結構需要是花列表,並且您應該刪除 days_left、name、new_row 的“全局”語句,因為這些信息需要對每朵花都是特定的。
將此添加到全局 scope (就在 new_flower() 定義之前):
# List of [name, days_left, label], one per flower
flowers = []
在 new_flower() function 中,使用 'append' 將新創建的花添加到列表中:
new_row = Label(main_Frame, text=str(row_Num)+" "+name+" " + str(days_left))
new_row.pack()
flowers.append([name, days_left, new_row])
next_day function 應該如下所示:
def next_day():
for i, f in enumerate(flowers):
# f is a 3-element list [name, days_left, label]
f[1] -= 1
name, days_left, label = f
label.config(text=str(i+1)+" "+name+" " + str(days_left))
'enumerate' 調用遍歷列表,返回列表中的當前索引(在 'i' 中)和當前列表項(在 'f' 中)。 索引為您提供行號。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.