在python和tkinter中从for循环切换变量

时间:2018-11-09 20:19:28

标签: python-3.x function variables tkinter lambda

我是python的新手,并且堆栈溢出,所以很抱歉,如果这个问题低于平均水平。无论如何,我试图用python和tkinter制作一个注册软件,我想制作它以便按钮在紫色之间切换:#ff4dd2 。由于按钮是从循环创建的,因此变得很难,我无法为按钮分配变量。如果您能抽出时间看一下这一点,将不胜感激:)(当前代码按预期运行,希望您能理解我的意思)

from tkinter import *
import time
import datetime
import re

root = Tk()
root.title("Attendence Register")
root.geometry('1350x650+0+0')

root.resizable(False, False)

nameframe = Frame(root, height=650, width=300)
nameframe.pack(side='left')

saveframe = Frame(root, height=650, width=300)
saveframe.pack(side='right')

outlist = []

def saveDataPresent(line):
    present[line].configure(bg='#ff4dd2')
    line = (line + ' is present')
    outlist.append(line)
    #print(outlist)

def saveDataAbsent(line):
    absent[line].configure(bg='#ff4dd2')
    line = (line + ' is absent')
    outlist.append(line)
    #print(outlist)

def saveDataIll(line):
    ill[line].configure(bg='#ff4dd2')
    line = (line + ' is ill')
    outlist.append(line)
    #print(outlist)

def saveDataHoliday(line):
    holiday[line].configure(bg='#ff4dd2')
    line = (line + ' is on holiday')
    outlist.append(line)
    #print(outlist)

def saveData():
    now = datetime.datetime.now()
    now = str(now)
    dire = 'logs/'
    now = dire + now

    now = re.sub(':', '', now)
    now += '.txt'

    log = open(now, "w+")
    log.close()
    log = open(now, "a")
    for i in outlist:
        i = (i + '\n')
        log.write(i)
    log.close()

text = open('names.txt','r')
line = text.readline()
count = 0
present = {}
absent = {}
ill = {}
holiday = {}

for line in text:
    count+= 1
    name = Label(nameframe, text=line)
    name.grid(row=count, column = 0)


    present[line] =  Button(nameframe, text='/', pady = 20, padx=20, bg ='#66ff66', command=lambda line=line: saveDataPresent(line))
    present[line].grid(row=count, column = 2)

    holiday[line] = Button(nameframe, text='H', pady=20, padx=20, bg='light blue', command=lambda line=line: saveDataHoliday(line))
    holiday[line].grid(row=count, column=3)

    ill[line] = Button(nameframe, text='ill', pady=20, padx=20, bg ='#ffa31a', command=lambda line=line: saveDataIll(line))
    ill[line].grid(row=count, column=4)

    absent[line] = Button(nameframe, text='NA', pady=20, padx=20, bg ='#ff6666', command=lambda line=line: saveDataAbsent(line))
    absent[line].grid(row=count, column=5)

savebut = Button(saveframe, text='Save', pady = 20, padx=20, command=saveData)
savebut.pack()

root.mainloop()

1 个答案:

答案 0 :(得分:0)

我在评论中放了它,但是看起来并不好:

def saveDataHoliday(line):
holidaycount[line] += 1

if holidaycount[line] % 2 == 1:
    holiday[line].configure(bg='#ff4dd2')
    line = (line + ' is holiday')
    outlist.append(line)
    #print(outlist)

else:
    holiday[line].configure(bg='light blue')
    line = (line + ' is holiday')
    outlist.remove(line)
    #print(outlist)enter code here

holidaycount先前被定义为字典:

holidaycount = {}

我为每个按钮(不存在,存在等)执行了此操作,然后:

for line in text:
count+= 1
name = Label(nameframe, text=line)
name.grid(row=count, column = 0)

presentcount[line] = 0
absentcount[line] = 0
illcount[line] = 0
holidaycount[line] = 0