📅  最后修改于: 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()
输出: