0
我正在使用tkinter來創建一個狀態面板,我需要手動更改每個標籤的顏色。我想通過向彈出的控制檯發出一個命令來做到這一點。我從對話框發出一個命令(例如:redalert(stat1)
),將命令與參數分開。我可以爲每個標籤使用單獨的if語句,如下所示:Tkinter:使用變量來配置標籤
if 'redalert' in command:
param = command.split('(')[1]
param = 'self.' + param.split(')')[0]
if param == 'self.stat1':
self.stat1.config(bg='red')
elif param == 'self.stat2':
self.stat2.config(bg='red')
但是有沒有更簡潔的方法呢?當我試圖說param.config(bg='red')
它認爲我想配置字符串而不是字符串的值。
這裏是整個代碼:
from Tkinter import *
class App:
def __init__(self, master):
self.stat1 = Label(text="Stat 1", bg='#990000', bd=3, relief=SOLID, padx=30, pady=20)
self.stat2 = Label(text="Stat 2", bg='#990000', bd=3, relief=SOLID, padx=30, pady=20)
self.stat3 = Label(text="Stat 3", bg='#990000', bd=3, relief=SOLID, padx=30, pady=20)
self.stat4 = Label(text="Stat 4", bg='#990000', bd=3, relief=SOLID, padx=30, pady=20)
self.stat5 = Label(text="Stat 5", bg='#990000', bd=3, relief=SOLID, padx=30, pady=20)
self.stat6 = Label(text="Stat 6", bg='#990000', bd=3, relief=SOLID, padx=30, pady=20)
self.stat7 = Label(text="Stat 7", bg='#990000', bd=3, relief=SOLID, padx=30, pady=20)
self.stat8 = Label(text="Stat 8", bg='#990000', bd=3, relief=SOLID, padx=30, pady=20)
self.stat9 = Label(text="Stat 9", bg='#990000', bd=3, relief=SOLID, padx=30, pady=20)
self.stat10 = Label(text="Stat 10", bg='#990000', bd=3, relief=SOLID, padx=26, pady=20)
self.stat11 = Label(text="Stat 11", bg='#990000', bd=3, relief=SOLID, padx=26, pady=20)
self.stat12 = Label(text="Stat 12", bg='#990000', bd=3, relief=SOLID, padx=26, pady=20)
self.stat13 = Label(text="Stat 13", bg='#990000', bd=3, relief=SOLID, padx=26, pady=20)
self.stat14 = Label(text="Stat 14", bg='#990000', bd=3, relief=SOLID, padx=26, pady=20)
self.stat15 = Label(text="Stat 15", bg='#990000', bd=3, relief=SOLID, padx=26, pady=20)
self.stat16 = Label(text="Stat 16", bg='#990000', bd=3, relief=SOLID, padx=26, pady=20)
self.stat1.grid(row=0, column=0)
self.stat2.grid(row=0, column=1)
self.stat3.grid(row=0, column=2)
self.stat4.grid(row=0, column=3)
self.stat5.grid(row=1, column=0)
self.stat6.grid(row=1, column=1)
self.stat7.grid(row=1, column=2)
self.stat8.grid(row=1, column=3)
self.stat9.grid(row=2, column=0)
self.stat10.grid(row=2, column=1)
self.stat11.grid(row=2, column=2)
self.stat12.grid(row=2, column=3)
self.stat13.grid(row=3, column=0)
self.stat14.grid(row=3, column=1)
self.stat15.grid(row=3, column=2)
self.stat16.grid(row=3, column=3)
root.bind("<F1>", self.callConsole)
def callConsole(self, master):
self.commandConsole = Console(root)
root.wait_window(self.commandConsole.top)
command = self.commandConsole.commandVar
if 'redalert' in command:
param = command.split('(')[1]
param = 'self.' + param.split(')')[0]
if param == 'self.stat1':
self.stat1.config(bg='red')
elif param == 'self.stat2':
self.stat2.config(bg='red')
class Console:
def __init__(self, master):
self.top = Toplevel()
self.top.transient(root)
self.command = Entry(self.top, font=("Helvetica", 15))
self.command.grid(row=0, column=0)
self.command.focus_set()
self.top.bind("<Return>", self.execute)
def execute(self, master):
self.commandVar = self.command.get()
self.top.destroy()
root = Tk()
app = App(root)
root.mainloop()
root.destroy()
這個作品,謝謝。我只有一個問題。如果我想爲每個標籤使用唯一名稱而不僅僅是stat 1-12,該怎麼辦? –
我想,而不是一個列表,你可以使用字典。關鍵將是名稱和價值將是標籤。然後,如果您有一個包含其名稱的字符串,則可以訪問統計信息。 – Kevin
再次感謝。我會試一試。 –