您好我使用for循环创建了15个按钮,每个按钮传递一个名称并打开一个新的顶级窗口,在顶层窗口中还有另外两个按钮,一个叫做'clock in'和'clock out'我想根据是否有人进入或退出来更改初始按钮(具有名称的按钮)的背景,但是我不知道如何处理在for循环中创建的各个按钮。
from Tkinter import *
master = Tk()
master.geometry('800x480+0+0')
master.title('Gateway Logger')
names = ['Annette', 'Heather', 'Tracey', 'Amy', 'Josh', 'Chris'
, 'Lekh', 'Ellie', 'Sarah', 'Richard', 'Paula', 'Michelle'
, 'Martin', 'Dave', 'Phil']
visitors = ['Visitor 1', 'Visitor2', 'Visitor 3', 'Visitor 4', 'Visitor 5', 'Visitor 6']
name_width = 20
name_height = 5
xpad = 5
ypad = 5
col = 0
roww = 0
sarah='out'
def clock_mast(n):
iowid=40
iohi=15
global clock
print "This is: " +str(n)
clock = Toplevel(width=300, height =300)
clock.title('Clock In/Out')
staff_name = Label (clock, text = n, font = "Verdana 24")
staff_name.grid(row=1,column=1,columnspan=2)
inbut=Button(clock, width=iowid, height=iohi, text='Clock In', bg='green',command=lambda:clock_in())
inbut.grid(row=2, column=1, padx=10,pady=50, columnspan=1)
outbut=Button(clock, width=iowid, height=iohi, text='Clock Out', bg='red',command=lambda:clock_out())
outbut.grid(row=2, column=2, padx=10,pady=50, columnspan=1)
def clock_in():
global clock
clock.destroy()
def clock_out():
global clock
clock.destroy()
for n in names:
b = Button(master,text=n,width = name_width, height = name_height,command=lambda n=n: clock_mast(n))
b.grid(row = roww, column = col,padx = xpad, pady = ypad)
col += 1
if col == 3:
col = 0
roww += 1
master.mainloop()
答案 0 :(得分:0)
当前程序的问题是,在for
循环中,当您创建新按钮时,实际上是在覆盖以前创建的按钮,因此无法再访问它们(因为没有参考)留在脚本中的那些按钮。)
我建议您可以创建一个字典并存储以n
(名称)为键的按钮,然后将父按钮的名称传递给clock_in()
和{{1}然后使用该名称来获取对按钮的引用并配置其属性。
示例代码 -
clock_out()