html5登录界面源代码_干货!用Tkinter实现简单的信息录入和查询界面!

由于工作需要,最近完成了一个简单的小软件,主要用于信息的录入和查询。

程序主要使用的是Tkinter, Python 的标准 GUI 库。Tkinter相对比较简单,可以制作出精美的界面,信息的录入和查询系统在于信息保存和界面交互,tkinter刚好适用,对于比较熟悉的同学,下面的内容可以不看,直接移步到源代码:

地址:

源代码​github.com

适当修改也能实现调查问卷界面,生成的Excel文件也利于后续分析。

话不多说,直接上图。

界面分为四个部分,第一个是主界面,设置选择按钮——新建、查询:

v2-897065113fb819a4fe57e72f0302dccf_b.jpg

第二个是新建文件界面,手动输入信息后以Excel文件保存在本地,并设置返回按钮:

v2-b66b30ac4c9aaa72affb53a9b98fe7cb_b.jpg

第三个是查询界面,通过已输入的名字或编号查询用户信息:

v2-38bf8a7faf5abbdbd588007383b51002_b.jpg

第四个是添加界面,对于已经存在的用户可以在查询信息后使用添加功能添加信息:

v2-7c72c506aea60fc568d1e914f5b55626_b.jpg

为了区分开各个版块,这里使用不同的进行管理。

首先,用Base类生成固定大小的界面框:

class Base():
    def __init__(self, master):
        self.root = master
        self.root.config()
        self.root.title("咨询信息记录查询系统")
        self.root.geometry("1000x680")
        self.root.resizable(False, False)
        Mainface(self.root) #Enter Mainface

当初始化Base类的时候,一些基本参数生成,包括名称(title)、界面大小(geometry)、可伸缩性(resizable),最重要的是最后一步Mainface(self.root),Mainface类设置的是主界面代码,初始化Base类也就初始化了Mainface类,所以当我们打开软件时,直接就进入了主界面。

Mainface类主要包括两个按钮和一张背景图:

#main interface 主界面
class Mainface():
    def __init__(self, master):
        self.master = master
        self.master.config(bg="palegoldenrod")
        #generating picture 生成图片
        self.Pilimage = Image.open(r"Imagebackground.gif")  
        self.image = ImageTk.PhotoImage(image=self.Pilimage)
        self.mainface = Frame(self.master, width=1000, height=680, background="palegoldenrod")
        self.mainface.pack()
        b_record = Button(self.mainface, text="新 建", width=6, height=1, font=(r"Fontsimhei.ttf", 15, "bold"), compound="center", fg="dimgray", bg="skyblue", command=self.record) #button1 for recording 按钮1
        b_record.place(relx=0.3, rely=0.3, anchor=CENTER)
    #过长,省去部分代码

Config设置的是界面背景,如果要使用图片做背景会比较麻烦,需要用from PIL import Image, ImageTk导入图片管理方法,再用tkinter中的Label组件放在指定位置;

此外,这里先使用了一个Frame组件,作用是先将这个Frame框放在界面框中,再将其他子组件,如Button、Entry、Text等放在Frame中,如果这些子组件需要集体移动(如全部向左移动)或销毁,那只用调整Frame框的位置或销毁即可。

在tkinter中,组件位置的摆放有三种方法,pack()grid()place()。三种方法均用于管理同在一个父组件下的所有组件的布局,pack 是按添加顺序排列组件,grid 是按行/列形式排列组件,place 则允许程序员指定组件的大小和位置。如代码中的self.mainface.pack()将会把Frame组件放在第一行,因为只有它一个组件;而代码b_record.place(relx=0.3, rely=0.3, anchor=CENTER)会把“新建”按钮放在Frame组件中的指定位置;后文中还会用到grid,通过设置行和列来进行组件摆放,常用于整齐的界面,如登录界面。

既然使用了Button组件,那一定少不了命令函数:

def record(self):
    self.mainface.destroy()  #destroy current interface
    Record(self.master)  #Enter Record interface

以记录函数为例,当点击按钮后,界面将会跳转到记录界面。跳转的实现事实上是先销毁当前Frame组件,再在界面中新建下一个Frame,从用户的角度来说,就实现了跳转。如上面的程序中,先用self.mainface.destroy()摧毁当前主界面,再新建下一个记录界面。

每一个界面的初始化都大同小异,这里不再赘述。需要特别说明的是文件的保存和读取,由于要生成Excel文件,所以这里用的xlwtxlrd库,一个用来写入数据,一个用来读取数据:

写入数据:

book = xlwt.Workbook(encoding="utf-8", style_compression=0)
sheet = book.add_sheet(file_name, cell_overwrite_ok=True)
sheet.write(0, 0, "姓 名")
sheet.write(1, 0, file_name)
sheet.write(0, 1, "咨询日期")

读取数据:

xl_a = xlrd.open_workbook(self.path)
table = xl_a.sheets()[0]
table_a = copy(xl_a)
sheet = table_a.get_sheet(0)
sheet.write(num_a, 1, add_date)

写入数据主要在新建用户信息时,当完成用户信息输入后,点击保存则会在指定文件夹生成与输入名称相同的xls文件,write方法可以在指定的单元格写入指定的内容。

这里没有让用户选择文件存储位置,原因是每个用户的存储位置不同,设计查询功能时比较麻烦,如果需要用户选择文件存储位置,可以使用filedialog.asksaveasfilename(title="保存文件",filetypes=ftypes, defaultextension=".xls")方法,点击后将会弹出位置选择框。

读取数据主要在查询用户信息时,当用户输入姓名或编号后,程序能找到指定的xls文件,并将指定的内容显示在界面中,包括新增信息,以日期+内容的形式展示出来,便于查看记录。

当然,程序也有很多不完善的地方,如当添加同名文件时,后面的文件会将前面的文件覆盖,也没有修改和删除功能,只能到DataFile文件夹找到相应的文件进行修改。

而对于一些报错信息,如不输入信息就进行查询而发生错误,使用try…except…语句进行提示,防止软件闪退。

v2-87f75abed4d77ce5a9691a582eee2f47_b.jpg

程序的大致内容就这么多,如果有什么疑问可以在评论区提问。

v2-1caa9453a0d299f08cb8a042b06ab8ba_b.jpg
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值