Sign in GUI interface
demand analysis
Make a GUI interface, enter students' personal information, and write them into local files.
Effect picture:
Click to confirm and sign in, then the filled information will be entered locally, and click to exit the system to close the program.
Project preparation
Software: Pycharm
module: tkinter, csv
Code
1. Basic code
from tkinter import *
class Application(Frame):
def __init__(self,master=None):
super().__init__(master)
self.master=master
self.pack()
self.createWidget()
def createWidget(self):
pass
if __name__ == '__main__':
root=Tk()
root.geometry('500x300+200+200')
root.title('签到系统')
app=Application(master=root)
root.mainloop()
2. Create a name box
#创建姓名框
self.name=Label(self,text="姓名")
self.name.grid(row=0,column=0)
v1=StringVar()
self.name_entry=Entry(self,textvariable=v1)#绑定组件
self.name_entry.grid(row=0, column=1,pady=15,padx=10)
3. Create the college box
#创建学院框
self.xueyuan = Label(self, text="学院")
self.xueyuan.grid(row=1, column=0)
v2 = StringVar()
self.xueyuan_entry = Entry(self, textvariable=v2)
self.xueyuan_entry.grid(row=1, column=1,pady=15)
4. Create a class box
# 创建班级框
self.student_class = Label(self, text="班级")
self.student_class.grid(row=2, column=0)
v3 = StringVar() # StringVar IntVar
self.student_class_entry = Entry(self, textvariable=v3)
self.student_class_entry.grid(row=2, column=1,pady=15)
5. Create a student number box
# 创建学号框
self.number = Label(self, text="学号")
self.number.grid(row=3, column=0)
v4 = StringVar() # StringVar IntVar
self.number_entry = Entry(self, textvariable=v4)
self.number_entry.grid(row=3, column=1,pady=15)
6.Button component
#按钮
self.button1=Button(self,text="确认签到",command=self.sign)
self.button1.grid(row=1, column=2,sticky=W,padx=10,pady=15)
self.button2 = Button(self, text="退出系统", command=self.quit_system)
self.button2.grid(row=2, column=2,sticky=E,padx=10, pady=15)
7. Login function
def sign(self):
student_name=self.name_entry.get()
collage=self.xueyuan_entry.get()
classji=self.student_class_entry.get()
num=self.number_entry.get()
#获取填写的信息写入本地文件
with open('D:/Python_project/扫码签到/data.csv','a',newline='',encoding='gb18030') as f:
csvwriter=csv.writer(f,delimiter=',')
csvwriter.writerow([student_name,collage,classji,num])
messagebox.showinfo("提示信息:","签到成功")
8. Exit function
def quit_system(self):
root.quit()
Effect display
At this time, a data.csv file has been generated locally, after opening it.
Limitation analysis
Since there are no content restrictions such as accounts and passwords, you can sign in successfully without entering them, so some improvements will be made in this area next.
def sign(self):
student_name=self.name_entry.get()
collage=self.xueyuan_entry.get()
classji=self.student_class_entry.get()
num=self.number_entry.get()
if len(student_name)==0 or len(collage)==0 or len(classji)==0 or len(num)==0:
messagebox.showinfo("提示信息:","信息未填写完整!")
elif len(num)!=10:
messagebox.showinfo("提示信息:","学号输入错误!十位数字")
else:
with open('D:/Python_project/扫码签到/data.csv','a',newline='',encoding='gb18030') as f:
csvwriter=csv.writer(f,delimiter=',')
csvwriter.writerow([student_name,collage,classji,num])
messagebox.showinfo("提示信息:","签到成功")
In this way, a prompt will be given when one of them is empty, and an error will be prompted when the student number is less than ten or more than ten.
Demonstrate: When the
college is not filled in.
When entering 11 digits for the student ID here.
Attach the complete source code:
from tkinter import *
from tkinter import messagebox
import csv
class Application(Frame):
def __init__(self,master=None):
super().__init__(master)
self.master=master
self.pack()
self.createWidget()
def createWidget(self):
#创建姓名框
self.name=Label(self,text="姓名")
self.name.grid(row=0,column=0)
v1=StringVar()
self.name_entry=Entry(self,textvariable=v1)#绑定组件
self.name_entry.grid(row=0, column=1,pady=15,padx=10)
#创建学院框
self.xueyuan = Label(self, text="学院")
self.xueyuan.grid(row=1, column=0)
v2 = StringVar() # StringVar IntVar
self.xueyuan_entry = Entry(self, textvariable=v2)
self.xueyuan_entry.grid(row=1, column=1,pady=15)
# 创建班级框
self.student_class = Label(self, text="班级")
self.student_class.grid(row=2, column=0)
v3 = StringVar() # StringVar IntVar
self.student_class_entry = Entry(self, textvariable=v3)
self.student_class_entry.grid(row=2, column=1,pady=15)
# 创建学号框
self.number = Label(self, text="学号")
self.number.grid(row=3, column=0)
v4 = StringVar() # StringVar IntVar
self.number_entry = Entry(self, textvariable=v4)
self.number_entry.grid(row=3, column=1,pady=15)
#按钮
self.button1=Button(self,text="确认签到",command=self.sign)
self.button1.grid(row=1, column=2,sticky=W,padx=10,pady=15)
self.button2 = Button(self, text="退出系统", command=self.quit_system)
self.button2.grid(row=2, column=2,sticky=E,padx=10, pady=15)
def sign(self):
student_name=self.name_entry.get()
collage=self.xueyuan_entry.get()
classji=self.student_class_entry.get()
num=self.number_entry.get()
if len(student_name)==0 or len(collage)==0 or len(classji)==0 or len(num)==0:
messagebox.showinfo("提示信息:","信息未填写完整!")
elif len(num)!=10:
messagebox.showinfo("提示信息:","学号输入错误!十位数字")
else:
with open('D:/Python_project/扫码签到/data.csv','a',newline='',encoding='gb18030') as f:
csvwriter=csv.writer(f,delimiter=',')
csvwriter.writerow([student_name,collage,classji,num])
messagebox.showinfo("提示信息:","签到成功")
def quit_system(self):
root.quit()
if __name__ == '__main__':
root=Tk()
root.geometry('500x300+200+200')
root.title('签到系统')
app=Application(master=root)
root.mainloop()
Note: Do a simple actual combat of what you have learned before.