Python tkinter更改for循环中创建的各个按钮参数

时间:2015-09-15 14:09:25

标签: python loops button for-loop tkinter

您好我使用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()

1 个答案:

答案 0 :(得分:0)

当前程序的问题是,在for循环中,当您创建新按钮时,实际上是在覆盖以前创建的按钮,因此无法再访问它们(因为没有参考)留在脚本中的那些按钮。)

我建议您可以创建一个字典并存储以n(名称)为键的按钮,然后将父按钮的名称传递给clock_in()和{{1}然后使用该名称来获取对按钮的引用并配置其属性。

示例代码 -

clock_out()