目录
简介:
用tkinter可以写出GUI界面,因为我的学习生活有这个需求,需要进行考勤,用肉眼考勤,实在太费劲,所以我开始有DIY做考勤软件工具想法,我也是找了很多资料才做出来的,从背景,布局,选择文件导入,点名逻辑(比较实到和应到人员的名单,输出应到人员中有,而实到人员中没有的名单)等等,一步步做出来的,可以搭配腾讯课堂导出的名单使用,进行快速考勤
界面:
想法思路:
先用tkinter做出界面布局,再添加背景,然后import askopenfilename,可以浏览电脑文件选择路径,把读取到的文件显示在Listbox上,然后导入实到和应到人员名单,比较实到和应到人员的名单,输出应到人员中有,而实到人员中没有的名单,即缺勤名单,最后输出缺勤名单。
代码实现:
#导tkinter包
from tkinter.filedialog import askopenfilename
import tkinter as tk # 使用Tkinter前需要先导入
from PIL import ImageTk,Image
window = tk.Tk() # 第1步,实例化object,建立窗口window
# 背景
canvas = tk.Canvas(window , width=800, height=600, bd=0, highlightthickness=0)
imgpath = 'bg1.png'
img = Image.open(imgpath)
photo = ImageTk.PhotoImage(img)
canvas.create_image(400, 285, image=photo)
canvas.pack()
canvas.create_window(0, 0, width=100, height=20)
# 第2步,给窗口的可视化起名字
window.title('腾讯课堂考勤工具')
# 第3步,设定窗口的大小(长 * 宽)
window.geometry('800x570') # 这里的乘是小x
#头部
tk.Label(window, text='实到人员',font=('微软雅黑', 12), width=8, height=2).place(x=100,y=0)
# 说明: bg为背景,font为字体,width为长,height为高,这里的长和高是字符的长和高,比如height=2,就是标签有2个字符这么高
tk.Label(window, text='应到人员',font=('微软雅黑', 12), width=8, height=2).place(x=350,y=0)
tk.Label(window, text='缺勤人员',font=('微软雅黑', 12), width=8, height=2).place(x=600,y=0)
#lisbox
# 在图形界面上创建一个标签label用以显示并放置
var1 = tk.StringVar() # 创建变量,用var1用来接收鼠标点击具体选项的内容
#选择文件
def selectPath1():
path_ = askopenfilename()
with open(path_,'r',encoding='utf-8')as myfile:
content = myfile.read()
mess =content.split('\n')
return mess
names1=selectPath1()
var1 = tk.StringVar()
var1.set(()) # 为变量var2设置值
#创建Listbox
lb1 = tk.Listbox(window, listvariable=var1) # 将var2的值赋给Listbox
# 创建一个list并将值循环添加到Listbox控件中
lb1.place(x=100,y=75,height=400,width=80)
for name1 in names1:
lb1.insert('end', name1) # 从最后一个位置开始加入值
lb1 = tk.Listbox(window)
lb1.place(x=350,y=75,height=400,width=80)
#中间list
var2 = tk.StringVar()
var2.set(()) # 为变量var2设置值
#创建Listbox
lb2 = tk.Listbox(window, listvariable=var2) # 将var2的值赋给Listbox
names2=selectPath1()
for name2 in names2:
lb2.insert('end', name2) # 从最后一个位置开始加入值
lb2.place(x=350,y=75,height=400,width=80)
#end
def Check():
t=0
# sum_name = names2[0]
print(names1)
print(names2)
for t in range(0,len(names2)-1):
# sum_name += names2[t]
if names2[t] not in names1:
# sum_name=[]
# with open('data1.txt', 'w', encoding='utf-8')as f:
# f.write(print(names2[t]))
# mess2 = sum_name.split('\n')
print('缺勤:',names2[t])
# 创建一个方法用于按钮的点击事件
Check_Bn = tk.Button(window, text='点名',command=Check).place(x=100,y=500,width=580)
# print(names4)
#最右list
var3 = tk.StringVar()
var3.set(('缺勤人员','在控制台')) # 为变量var3设置值
# # 创建Listbox
lb3 = tk.Listbox(window, listvariable=var3)
lb3.place(x=600, y=75, height=400, width=80)
# 主窗口循环显示
window.mainloop()