📜  Python | 使用Tkinter的简单注册表格

📅  最后修改于: 2020-05-02 07:21:45             🧑  作者: Mango

先决条件:openpyxl模块
Python提供了Tkinter工具包来开发GUI应用程序。现在,这取决于开发人员的想象力或必要性,他/她想使用此工具包进行开发的内容。让我们使用Tkinter制作一个简单的信息表单GUI应用程序。在此应用程序中,用户必须填写所需的信息,并且该信息会自动写入excel文件。

首先,创建一个空的excel文件,然后在程序中传递excel文件的绝对路径,以便程序能够访问该excel文件。
下面是实现:

# 导入openpyxl和tkinter模块
from openpyxl import *
from tkinter import *
# 全局声明wb和sheet变量
# 打开现有的excel文件
wb = load_workbook('C:\\Users\\Admin\\Desktop\\excel.xlsx')
# 创建工作表对象
sheet = wb.active
def excel():
    # 调整Excel电子表格中的列宽
    sheet.column_dimensions['A'].width = 30
    sheet.column_dimensions['B'].width = 10
    sheet.column_dimensions['C'].width = 10
    sheet.column_dimensions['D'].width = 20
    sheet.column_dimensions['E'].width = 20
    sheet.column_dimensions['F'].width = 40
    sheet.column_dimensions['G'].width = 50
    # 将给定数据写入特定位置的excel电子表格
    sheet.cell(row=1, column=1).value = "Name"
    sheet.cell(row=1, column=2).value = "Course"
    sheet.cell(row=1, column=3).value = "Semester"
    sheet.cell(row=1, column=4).value = "Form Number"
    sheet.cell(row=1, column=5).value = "Contact Number"
    sheet.cell(row=1, column=6).value = "Email id"
    sheet.cell(row=1, column=7).value = "Address"
# 设定焦点的功能(光标)
def focus1(event):
    # 将重点放在Course_field框上
    course_field.focus_set()
# 设定焦点的函数
def focus2(event):
    # 将重点放在sem_field框上
    sem_field.focus_set()
# 设定焦点的函数
def focus3(event):
    # 将焦点放在form_no_field框上
    form_no_field.focus_set()
# 设定焦点的函数
def focus4(event):
    # 将焦点放在contact_no_field框上
    contact_no_field.focus_set()
# 设定焦点的函数
def focus5(event):
    # set focus on the email_id_field box
    email_id_field.focus_set()
# 设定焦点的函数
def focus6(event):
    # 将焦点放在address_field框上
    address_field.focus_set()
# 清除文本输入框内容的功能
def clear():
    # 清除文本输入框的内容
    name_field.delete(0, END)
    course_field.delete(0, END)
    sem_field.delete(0, END)
    form_no_field.delete(0, END)
    contact_no_field.delete(0, END)
    email_id_field.delete(0, END)
    address_field.delete(0, END)
# 从GUI窗口获取数据并写入Excel文件的功能
def insert():
    # 如果用户未填写任何条目,则打印“空输入"
    if (name_field.get() == "" and
        course_field.get() == "" and
        sem_field.get() == "" and
        form_no_field.get() == "" and
        contact_no_field.get() == "" and
        email_id_field.get() == "" and
        address_field.get() == ""):
        print("empty input")
    else:
        # 将最大行数和最大列数的值赋给在excel工作表中写入数据的变量
        current_row = sheet.max_row
        current_column = sheet.max_column
        # get方法返回当前文本作为字符串,我们将其写入excel电子表格中的特定位置
        sheet.cell(row=current_row + 1, column=1).value = name_field.get()
        sheet.cell(row=current_row + 1, column=2).value = course_field.get()
        sheet.cell(row=current_row + 1, column=3).value = sem_field.get()
        sheet.cell(row=current_row + 1, column=4).value = form_no_field.get()
        sheet.cell(row=current_row + 1, column=5).value = contact_no_field.get()
        sheet.cell(row=current_row + 1, column=6).value = email_id_field.get()
        sheet.cell(row=current_row + 1, column=7).value = address_field.get()
        # 保存文件
        wb.save('C:\\Users\\Admin\\Desktop\\excel.xlsx')
        # 将焦点放在name_field框上
        name_field.focus_set()
        # 调用clear()函数
        clear()
# 测试代码
if __name__ == "__main__":
    # 创建一个GUI窗口
    root = Tk()
    # 设置GUI窗口的背景色
    root.configure(background='light green')
    # 设置GUI窗口的标题
    root.title("registration form")
    # 设置GUI窗口的配置
    root.geometry("500x300")
    excel()
    # 创建一个表单标签
    heading = Label(root, text="Form", bg="light green")
    # 创建一个名称标签
    name = Label(root, text="Name", bg="light green")
    # 创建课程标签
    course = Label(root, text="Course", bg="light green")
    # 创建一个学期标签
    sem = Label(root, text="Semester", bg="light green")
    # 创建表格编号标签
    form_no = Label(root, text="Form No.", bg="light green")
    # 创建联系人号码标签
    contact_no = Label(root, text="Contact No.", bg="light green")
    # 创建一个电子邮件ID标签
    email_id = Label(root, text="Email id", bg="light green")
    # 创建地址标签
    address = Label(root, text="Address", bg="light green")
    # 网格方法用于将小部件放置在表格状结构的各个位置.
    heading.grid(row=0, column=1)
    name.grid(row=1, column=0)
    course.grid(row=2, column=0)
    sem.grid(row=3, column=0)
    form_no.grid(row=4, column=0)
    contact_no.grid(row=5, column=0)
    email_id.grid(row=6, column=0)
    address.grid(row=7, column=0)
    # 创建一个文本输入框以输入信息
    name_field = Entry(root)
    course_field = Entry(root)
    sem_field = Entry(root)
    form_no_field = Entry(root)
    contact_no_field = Entry(root)
    email_id_field = Entry(root)
    address_field = Entry(root)
    # 小部件的bind方法用于将函数与事件绑定,每当按下Enter键时,然后调用focus1函数
    name_field.bind("", focus1)
    # 每当按下回车键,然后调用focus2函数
    course_field.bind("", focus2)
    # 每当按下回车键,然后调用focus3函数
    sem_field.bind("", focus3)
    # 每当按下回车键,然后调用focus4函数
    form_no_field.bind("", focus4)
    # 每当按下回车键,然后调用focus5函数
    contact_no_field.bind("", focus5)
    # 每当按下回车键,然后调用focus6函数
    email_id_field.bind("", focus6)
    # 网格方法用于将小部件放置在表格状结构的各个位置 .
    name_field.grid(row=1, column=1, ipadx="100")
    course_field.grid(row=2, column=1, ipadx="100")
    sem_field.grid(row=3, column=1, ipadx="100")
    form_no_field.grid(row=4, column=1, ipadx="100")
    contact_no_field.grid(row=5, column=1, ipadx="100")
    email_id_field.grid(row=6, column=1, ipadx="100")
    address_field.grid(row=7, column=1, ipadx="100")
    # 调用Excel功能
    excel()
    # 创建一个提交按钮并放置在根窗口中
    submit = Button(root, text="Submit", fg="Black",
                            bg="Red", command=insert)
    submit.grid(row=8, column=1)
    # 启动GUI
    root.mainloop()

输出: