故事是这样的,我有一个台电的平板,16年的,系统是win10,但是现在这个平板由于处理器垃圾,并且时间长了,触控也不灵敏,于是我就诞生了一个想法,想把它改成一个电子日历。

寨板的配置

我先是思考了UI的布局,我打算让他显示时间,日历,天气,还有代办。我还想让手机消息通知显示在这里,但是不知道消息推送服务有没有开放接口,所以先设计上了。

UI我是这样来布局的,想法想完了,之后就是去实现了。至于去实现,我先想到了易语言,确实是我目前掌握最多的一门桌面编程语言,但是我又不是很想用,觉得易语言效率太低,还很占用内存,于是我就打算去尝试使用python的pyQt5去写UI。

但是pyqt5我不会啊,于是

很丢人的事我安装pyqt5库就出了问题,环境变量没添加,导致我窗口一直跑不起来。安装好了之后,我就开始着手去调试。

首先是时间,我经过百度后使用了这样一段代码来实现:使用time库和threading,每一秒获取一次系统时间

这里还发现一个问题,假如每一秒获取一次时间的话有时候会卡一下,解决方法是0.5s刷新一次时间就流畅了

之后日历,我还在愁日历怎么去写,然后发现QT的designer自带的有个日历

懒人狂喜,这不就省了不知道多少功夫,日历解决了随后是天气。

天气我在想是使用现成的API接口还是去爬天气网站上的,后来我选择了后者,我使用了一个天气接口

http://wthrcdn.etouch.cn/weather_mini?citykey={cityCode}

加上城市代码使用requests库去GET请求可以获得一个json数据,格式化一下数据即可得到天气

本来我是打算把获取天气的代码跟刷新时间的放在一起,但是我想到天气网站也不会刷新这么快,并且每秒请求一次不说花费网络资源,说不行还会以为请求过于频繁被封IP,于是我单独写了个weather函数去15分钟获取一次天气,然后UI下面写个最后刷新时间,这样就很清晰明了。

最后就是UI了,我肯定也想写出来好看的UI,于是我就挑选了一张壁纸,先用PS给左上角的时间加上一个半透明的圆角矩形,再加上阴影,给右边的天气框也同理,再写上文字“天气 Weather”

OK这个背景我已经满意了,随后就是QT Desiger新建窗口,因为平板分辨率是1080P,就窗口宽高1920*1080。然后放背景和右边天气文本框。

但是一个label标签的背景就算设置了窗口背景也是白的一块,要是设置全局背景就会显示左上角,非常的不和谐。

于是我就打算一块块用PS扣出文本框的位置,然后裁剪出来当文本框背景,就可以实现“透明的文本框”效果。

扣出来每个文本框背景后,扣完的也留着用于QT Designer定位文本框,再把所有图片素材全部保存下来,还顺便做了两个按钮图标。

然后就是用QT依次去设置UI,使用QT Designer设计窗口后,用pyUIC5和pyrcc5把QT Designer设计好的窗口(.ui文件)和静态资源文件(.qrc)打包成py就可以在程序中加载引用了。其中还遇到了两个个小问题:

一个是我不会让创建的windows窗口全屏。后来谷歌找到了办法:“在窗口创建完成后添加 MainWindow.showFullScreen() 。

另一个是关闭按钮,我本来在查如何关闭QT窗口,但是后来我意识到,直接使用os._exit(}退出python程序QT肯定也跟着退出了,在无数次debug后,程序也是终于跑起来了。

之后因为我不想再给平板装环境,就是用Pyinstaller给程序打包成了一个exe文件拷到平板去运行

最后的得到一个很萌系logo的exe程序

拷到平板上也能跑,效果如图

下一步打算实现让他显示特定内容,我暂时还不会用TCP或者UDP去发包,初步想法是还用flask,我post过去一句话,那边接受并且实时显示在平板上,不过要慢慢来了~

源码打算上传到github上凑仓库数~[天气日历renhy04/WTclock: 基于python的电子时钟天气显示软件 (github.com)]

届ける言葉を今は育ててる
最后更新于 2022-03-15