Tkinter. Project combat one: sign in GUI interface

demand analysis

Make a GUI interface, enter students' personal information, and write them into local files.
Effect picture:
Insert picture description here
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

Insert picture description here
At this time, a data.csv file has been generated locally, after opening it.
Insert picture description here

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.
Insert picture description here
When entering 11 digits for the student ID here.
Insert picture description 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.

Guess you like

Origin blog.csdn.net/qq_44862120/article/details/107958412