自2019年7月,上海市率先实现垃圾分类政策开始,很多城市陆续推出垃圾分类的政策,积极响应国家号召,为建设成绿色环保的新城市而努力。预估在2020年底,先行先试的46个重点城市!
前段时间,小编所在的城市蓝鲸也开始了垃圾分类,每次去扔垃圾都在要提前科普查询一下:你这个是什么垃圾!!好麻烦啊,既然是玩Python,不如动手写一个程序进行垃圾分类的学习,肝了一夜终于完成了。
01、垃圾分类的数据获取
根据《上海市生活垃圾管理条例》,城市生活垃圾主要分为以下四类:
- 可回收物,是指废纸张、废塑料、废玻璃制品、废金属、废织物等适宜回收、可循环利用的生活废弃物;
- 有害垃圾,是指废电池、废灯管、废药品、废油漆及其容器等对人体健康或者自然环境造成直接或者潜在危害的生活废弃物;
- 湿垃圾,即易腐垃圾,是指食材废料、剩菜剩饭、过期食品、瓜皮果核、花卉绿植、中药药渣等易腐的生物质生活废弃物;
- 干垃圾,即其它垃圾,是指除可回收物、有害垃圾、湿垃圾以外的其它生活废弃物。
为了获取垃圾分类数据集,小编经过资料的查询,在码云中小编找到一个垃圾分类数据库,数据库中总共包含了可回收垃圾、有害垃圾、湿垃圾、干垃圾、大件垃圾五种类别,每种类别的垃圾数目如下表所示:
02、垃圾分类学习器设计
1).整体设计思路
垃圾分类学习器包含了学习模块和测试模块两部分,用户可以根据需求对垃圾类别进行学习,在经过一定的学习后,通过测试模块对自己的学习成果进行检验,检验自己能否将垃圾正确分类。
整个学习器的设计过程包含了数据处理、学习模块搭建、测试模块搭建三个部分,接下来小编将对每一个模块进行编程的实现。
2).数据处理
这里使用大名鼎鼎的pandas进行数据处理,通过pd.read_csv可以获取原始表格数据,通过dfdf["class"] == 2中修改参数数字2获取不同种类垃圾的list,到此,就可以获取所有种类的垃圾以及不同种类垃圾的list数据,是不是很简单呢。
3).学习模块搭建
学习模块总共包含了垃圾分类意义的显示,四种常见垃圾的图标显示,以及不同种类垃圾的滑动文本框显示,下面将对程序展开具体介绍。
上面代码是垃圾分类意义的显示和四种常见垃圾的图标显示程序,由程序可以看出,显示设计的思路大致为:
- 首先在root主窗口中建立相应的tk.Frame,并确定其在主窗口的位置;
- 然后利用tk.Label标签显示文字信息,镶嵌在tk.Frame的具体位置进行显示
- 对于图片的显示却不太简单,需要在root主窗口中建立新的tk.Canvas,并根据设计好的大小对图像进行Resize操作,canvas2.create_image创建图片才得以显示;
4).垃圾的分类
对于枚举类垃圾的显示则更为复杂,下面会详细介绍:
为了实现对不同类别垃圾的展示学习,需要调用按键回调函数,获取枚举类的信息,再根据获取的信息进行相应类别垃圾信息的显示。
- 我们先建立了垃圾类的list,通过OptionMenu部件进行枚举类的显示;
- 为了实现对类别的实时更新,调用按键的回调函数garbage_process,对scrolledtext.ScrolledText滚动文本框进行写入;
- 这里需要注意的是,如果将scrolledtext.ScrolledText安放在root主界面上,会产生位置错位的情况;
- 小编这里新建了canvas3画布,将scrolledtext.ScrolledText放在了canvas3画布进行显示;
到这里便完成了学习模块界面的设计,显示效果如下:
03、测试模块搭建
对于测试模块,其搭建的思想和垃圾枚举类的搭建类似,但是加入了单选按钮模块,使用用户可以进行自我测试,检测自己学习的成果。
在上面的代码中,可以看到,获取所有的垃圾名字作为枚举类OptionMenu对象创建下拉选项,用户可以数据库中选择垃圾品种进行自我测试。
当选择完垃圾后,对垃圾进行分类,利用单选按钮Radiobutton部件选择垃圾种类,选择完成之后,左键按下选择练习按键,调用ceshi_process函数与数据库中信息进行比对,对结果进行输出。若正确,给予鼓励,否则进行纠正。整体界面显示如下:
最后我们来演示一下,整个过程:
原创真的不容易,从这个点子的产生,到代码的设计,数据的采集,最后进行编写调试,小编辛苦了一个周末才完成。看着自己完成的小工具,也蛮有成就感的!后面我会录制视频放在我们的B站(搜索:菜鸟玩Python)上面,到时源码视频一起奉上!
希望大家都加入到垃圾分类的队伍中来,保护环境从你我做起,让水更清天更蓝,贡献一小份力量吧!