这是百(每天)年一次的比较有实(水)际(水)价(水)值(水)的编程技术文章
事情要从一个周前的那个星期五说起。。。
早晨班主任找到我说:“听说你会编程啊?昨天我在群里发的那个文档你看到了吗?”
我一脸懵:“啥文档?”
班主任:“那个什么编程比赛的,回家看一看,那你去参加吧,就怎么定了啊!”
于是呢我就勉强答应了班主任。。。
文档里就是讲了一些这次编程比赛的时间限制(一个周末),比赛项目(我参加的是程序设计)
我决定使用我所唯一学过的编程语言python完成这次比赛(其实html我也会一些,可是又没有网页设计比赛)
另外我也是第一次使用python进行编程比赛(以前只参加过一次scratch的蓝桥杯)
于是呢,我两天的爆肝开始了
第一个晚上,我想好了作品主题并完成了作品UI设计
大概是做一个便携工具安卓app
这里放出我那天晚异想开天的一部分设计图
设计完后,我马上就把图发给老师
以下是老师的建议:
1.把python打包成安卓apk是一个复杂繁琐的过程,还不如干脆直接做成电脑软件,再说安卓app也不符合比赛的要求
2.根据上面一条建议,修改UI
于是稍加改动,我把UI改成了这样:
累死了
0点多了
先睡吧
一大早(其实是上午10点),起了床
今天任务是做功能
明天再把界面完成
打开VS code
深思了自己目前的编程水平
才决定先把简单的功能写完
这也算是非常简单的一个功能
写个分支语句就能完成
于是我分分钟写了以下代码:
lj = input("垃圾名称?")
if lj in ('废纸','矿泉水瓶','牛奶盒','衣服','玻璃','书包','鞋','镜子','包装纸','牙刷'):
lj_kind=f'{lj} 是可回收垃圾'
elif lj in ('剩菜','剩饭','骨头','菜叶','果皮','菜根','鸡蛋壳','鸡蛋','苹果','花','落叶'):
lj_kind=f'{lj} 是厨余垃圾'
elif lj in ('电池','药瓶','针管','化妆品','灯泡','水银温度计','油漆桶','荧光灯管','过期药品'):
lj_kind=f'{lj} 是有害垃圾'
elif lj in ('花生壳','尘土','卫生纸','塑料袋','厕纸','烟盒','食用油','灰尘'):
lj_kind=f'{lj} 是其它垃圾'
else:
lj_kind=f'我不知道{lj}是什么垃圾,你还是先放回口袋吧'
print(lj_kind)
这应该也不难
首先打开咱们的某度
找到了体质计算公式:
体质指数(BMI)=体重(kg)÷身高^2(m)
还有对比标准:
| BML<18.5 | 18.532 | | :——: | :———–: | :——-: | :——-: | :——: | | 过轻 | 正常 | 过重 | 肥胖 | 非常肥胖 |
又是一个分支语句:
height=input("身高?")
weight=input("体重?")
weight=int(weight)
height=float(height)
bml = height*height
bml = weight/bml
if bml<18.5:
jg = "过轻"
elif bml<23.9:
jg = "正常"
elif bml<27:
jg = "过重"
elif bml<32:
jg = "肥胖"
else:
jg = "非常肥胖"
print(jg)
所谓随手记就是只有一个页面的备忘录,可记录笔记和作业,也可以记录一些生活中的重要事情,防止忘记
该功能我的构思如下:
用户输入的内容后,会在本地新建一个txt文件,然后会把获取到的内容替换进去,再次打开应用时,程序会获取该txt文档里的内容,显示在输入框中
于是呢,我翻了翻我的书
得知如何保存内容:
filename='./wb.txt'
with open(filename,'w') as file_object:
file_object.write(word1)
其中filename变量是文件的绝对路径
然后读取文件内容可以这样:
with open('./wb.txt') as file_object:
contents = file_object.read()
contents变量是获取到的内容
明白了怎样读取和编辑文件内容
实现随手记也就不难了
就像题目所说的那样,程序会获取到输入的文字,然后朗读出来
可能你会疑惑:这好像没什么用?
这个功能的目的是造福部分不识字的老年人和某些视障人士
然后你会吐槽:这然道不**吗,想要朗读文字不应该先输入文字吗,不识字的老人会打字吗?
所以,我添加了自动粘贴功能,你只要把别人发给你的文字短信内容复制下来,打开软件,程序就会自动将剪贴板中的内容粘贴在文本框下,只要轻点朗读,就OK了
再次打开某度,
根据资料写了以下代码
import win32com.client
import time
speak_out = win32com.client.Dispatch('SAPI.SPVOICE')
nr = input("文字?")
def speak(str):
speak_out.Speak(str)
speak(nr)
time.sleep(1)
nr变量是你输入的文字内容
这应该是所有程序中最难实现的一个
我的构思如下:
点击搜索时,程序获取到输入框中你输入的英语单词,先会到本地词库检索单词,如果没有检索到该单词,就会调用有道词典的api检索单词
会使用到bs4对html对网页进行解析
这里有篇参考文章,这里就不多讲了:点击直达
虽然我已经做出来了我的剪贴板功能了,但想想作用不大,也不可能要求用户一直开着软件,所以就取消了该功能
接下来就是最难的一个环节了:做界面
一个软件不仅要有好功能,还要有对用户友善的界面
经过几十分钟的网络查询
我找到了一个可以说较为满意的做界面的python库——tkinter
引入tkinter,取别名tk
import tkinter as tk
import tkutils as tku
建立软件窗口
def __init__(self):
self.root = tk.Tk()
self.root.title('松果tool')
self.root.iconbitmap('./12.ico')
self.root.geometry("740x376")
self.root.resizable(0,0)
tku.center_window(self.root)
这里相当于html中的<head>标签
我的窗口大概分三个布局是“frameTop”(顶部标题栏)“frameLeft”(左侧功能栏)“frameMain”(中间区域,主窗口)
那让我们再建立一个<body>标签(就是名字是body的函数)
插入内容
self.frameTop = tk.Frame(self.root, bg="#2b4490", height=50, width=700)
self.frameLeft = tk.Frame(self.root, bg="#2a5caa", width=200)
self.frameMain = tk.Frame(self.root, bg="#426ab3")
self.frameTop.pack(side='top', expand='no', fill='x')
self.frameLeft.pack(side='left', expand='no', fill='y')
self.frameMain.pack(side='right', expand='yes', fill='both')
建立三个布局
分别定位三个布局(pack)
side:位置
expand:是否扩展
fill:填充
完成这些就可以开始做各个功能的界面了
根据之前的设计,左侧栏(frameLeft)放按钮,中间部分(frameMain)就是功能界面
每次点击左侧栏(frameLeft),都能够清空中间部分(frameMain)的内容,再显示要显示的内容
self.clean_main_area()
将这一行代码写入函数就可以实现啦
tkinter库的模块也挺丰富的
比如:
文本框
tk.Label(self.frameMain, text='文本内容', fg='#000000')\
.pack(side='top', expand='no', fill='x')
按钮
tk.Button(self.frameMain, text="按钮上的文字", width=20, command=jsjsjs)\
.pack(side="top", padx=20)
单行 文本/输入 框
tk.Entry(self.frameMain, width=50)\
.pack(side="top", padx=20)
多行 文本/输入 框
tk.Text(self.frameMain, width=50, height=9.2)
.insert('end', contents)
.pack(side="top", padx=20, pady=10)
有了这四个模块就够完成这个程序了
最后再把昨天写好的功能代码安装上去就行了
过程也不是很复杂
就先省略了吧,不具体说明了
一直到晚上九点,才把所有写好
等等,UI美化呢?
啊,完全来不及啦
明天就要交啦
而且自带UI的按钮丑死了
放几张库自带UI和我设计的UI对比图吧
按钮:
单行输入框:
多行文本框:
az。。。。
总体对比:
就这!就这!就这!
最后把应用主题配色改成蓝的才比较满意
反正比原来自带灰底的好,像极了win98的风格
明天就要交作品了
希望“功夫不负有心人”吧
**比赛期间不能放出成品下载链接,所以想体验我作品的话以后再说吧