Python垃圾分类查询|基于文本生成字典|简单查询界面

小小白的一个简单的垃圾分类查询小程序

  1. 引言
    你是什么垃圾?最近垃圾分类问题真是让人头疼。一杯喝剩的奶茶从珍珠到盖子都要做不同的处理,珍珠是湿垃圾,剩的液体倒入下水道,杯子冲洗干净…篮球属于什么垃圾?骨头属于什么垃圾?脑海中浮现出一系列的问题。我就想利用程序查询解决这些问题,即输入待查物品名称,得到分类结果,干垃圾、湿垃圾、有害垃圾还是可回收垃圾。本人小小白不会神经网络贝叶斯之类的,就用的简单文本字典查询。
    话不多说,先看界面:
    Python垃圾分类查询|基于文本生成字典|简单查询界面_第1张图片
    在右下角就是查询的交互窗口,进行几个查询尝试:
    牛奶盒的查询结果
    鱼骨的查询结果
    毛巾的查询结果
    因为我是在已经分好类的文本里进行的查询,所以像毛巾这个文本里面没有的内容就查不到啦,不过对垃圾分类有研究的同学可以向文本里面尽情添加,我的文本文件长这个亚子,此处链接致敬一个前辈的垃圾分类小程序代码和文本:
    Python垃圾分类查询|基于文本生成字典|简单查询界面_第2张图片
    大致就是这样,然后下面说下代码实现。

  2. 实现
    用底下的语句实现gui界面,我是第一次用tkinter哈哈,边写边查,感谢学java的时候老师帮我打下了坚实的图形界面基础,所以这个上手也快,致敬一下这个很全很全的tkinter用法宝典Python GUI之tkinter窗口视窗教程大集合(看这篇就够了)

    import tkinter as tk
    然后就是把文本文档数据读进来存成字典的形式,这个参考的垃圾分类小程序还是刚刚在文本那一块给大家介绍过的博客,我会把这个程序完整代码放到最后滴
    接着就是界面的设置了,开始放入图片,放图片这一块我试了超久的,放到label里失败,还不停有tcl:图片doesn’t exist报错,最后成功了,具体原因可能是 运气8:

    #创建页面
    window=tk.Tk()#创建gui界面
    window.title("你是什么垃圾")#界面改名
    window.geometry("820x520")#界面大小
    photo=tk.PhotoImage(file="D://cs//python//summer//timg.png")
    text=tk.Text(window,width=200,height=35)
    text.image_create(END,image=photo)
    text.grid(row=0,column=0)
    接下来放两个frame, 每个frame里放label,entry和button
    #上层frame
    

    frame1=tk.Frame(window)
    l1=tk.Label(frame1,text=“垃圾名称:”)#设置第一个标签
    l1.grid(row=0,column=0)
    e1=tk.Entry(frame1,show=None)#显示输入
    e1.grid(row=0,column=1)
    b1=tk.Button(frame1,text=“查询”,command=hit_me)#插入查询按钮
    b1.grid(row=0,column=2)
    frame1.grid(row=2,column=0)
    #下层frame
    frame2=tk.Frame(window)
    l2=tk.Label(frame2,text=“分类结果:”)
    l2.grid(row=0,column=0)
    e2=tk.Entry(frame2,show=None)
    e2.grid(row=0,column=1)
    b2=tk.Button(frame2,text=“结束”,command=my_quit)#插入结束按钮
    b2.grid(row=0,column=2)
    frame2.grid(row=3,column=0)
    最后mainloop()循环运行起来就可以玩耍了!

    #消息循环
    window.mainloop()

3.完整代码

import tkinter as tk
from tkinter import END
#垃圾分类数据文本预处理,存到字典中
with open("D://cs//python//summer//garbage.txt",'r') as file:
    data_line=file.readline()#处理第一行数据
    data_line=data_line.replace('\t',',')#不同垃圾类别用逗号分开
    data_line=data_line.strip('\n')#去掉最右边的换行符
    keys=data_line.split(',')#分割出键
    #print(keys)
    values_wet=set()#湿垃圾集合
    values_dry=set()
    values_harm=set()
    values_re=set()
    data_line=file.readline()#读取第二行数据
    while data_line:#文件没有结束
        data_line=data_line.replace('\t',',')
        data_line=data_line.strip('\n')
        values=data_line.split(',')
        values_wet.add(values[1])
        values_dry.add(values[2])
        values_harm.add(values[3])
        values_re.add(values[4])
        data_line=file.readline()#读取下一行
    dic={keys[1]:values_wet,keys[2]:values_dry,keys[3]:values_harm,keys[4]:values_re}
file.close()

#查询按钮操作
def hit_me():
    e2.delete(0,20)
    result=[k for k,v in dic.items() if e1.get() in v]#列表解析式
    if result:
        e2.insert(0,result)
    else:
        e2.insert(0,"未查询到结果")
#退出程序
def my_quit():
    window.quit

#创建页面
window=tk.Tk()#创建gui界面
window.title("你是什么垃圾")#界面改名
window.geometry("820x520")#界面大小
photo=tk.PhotoImage(file="D://cs//python//summer//timg.png")
text=tk.Text(window,width=200,height=35)
text.image_create(END,image=photo)
text.grid(row=0,column=0)
#上层frame
frame1=tk.Frame(window)
l1=tk.Label(frame1,text="垃圾名称:")#设置第一个标签
l1.grid(row=0,column=0)
e1=tk.Entry(frame1,show=None)#显示输入
e1.grid(row=0,column=1)
b1=tk.Button(frame1,text="查询",command=hit_me)#插入查询按钮
b1.grid(row=0,column=2)
frame1.grid(row=2,column=0)
#下层frame
frame2=tk.Frame(window)
l2=tk.Label(frame2,text="分类结果:")
l2.grid(row=0,column=0)
e2=tk.Entry(frame2,show=None)
e2.grid(row=0,column=1)
b2=tk.Button(frame2,text="结束",command=my_quit)#插入结束按钮
b2.grid(row=0,column=2)
frame2.grid(row=3,column=0)

#消息循环
window.mainloop()

代码是跑通了的,注意的几点:第一,记得from tkinter import END,之前忘记了导致END报错,这个参数有两个函数可以用到;文件目录大家换成自己的本地文件路径。第二,图片插入那一块可以有很多别的方法,canvas就挺好,大家可以试试。第三,按钮的函数大家也可以进行改进,我的hit_me()还挺粗糙的,第四,布局的话我用的grid,其实还有pack,也挺好。

然后我把参考的链接再放一遍吧,致敬前辈们,感谢笔芯:
1.Python GUI之tkinter窗口视窗教程大集合(看这篇就够了)
2.垃圾分类小程序

你可能感兴趣的:(Python垃圾分类查询|基于文本生成字典|简单查询界面)