Python干饭神器告诉你,今天吃什么,再也不用为吃什么发愁!

图片

亲爱的小伙伴们,由于微信公众号改版,打乱了发布时间,为了保证大家可以及时收到文章的推送,可以点击上方蓝字关注测试工程师成长之路,并设为星标就可以第一时间收到推送哦

一.前言

hello,大家好,我是糖糖,打工人每天最幸福的时刻莫过于干饭了 😎,然而最纠结的时刻莫过于今天吃什么呢? 😂,以下是原文,于是乎我用Python写了一个干饭神器,今天分享给大家,别忘了给我点赞 收藏 评论哟~

话不多说,先看效果图

图片

图片

还有隐藏福利帮你的完成减肥大业

图片

我们将会介绍如何使用Python编写一个带有界面的可切换的轮播图程序。轮播图程序可以从指定的文件夹中读取图片,并可以自动切换到下一张图片。如果图片比较大,则可以进行缩放以适应窗口大小。

二.准备工作

在开始编写程序之前,我们需要安装以下依赖项:

  • tkinter:用于创建GUI界面。

  • Pillow:用于处理图片。tkinterpython一个内置集成库,Pillow可以使用pip命令来安装

pip install tkinter Pillow

当安装完成后,我们就可以开始编写程序了。

三.编写代码

说了折磨多,你们是不是非常期待我的代码呀,看代码之前,别忘了先点个关注哟~,接下来,进入代码编写环节

1.导入所需的库

import os
import tkinter as tk
from PIL import ImageTk, Image
  • os库用于读取指定目录下的文件列表;

  • tkinter库用于创建GUI界面;

  • Pillow库用于处理图片。

2.创建GUI界面

# 初始化窗口,并设置窗口的标题,以及窗口的初始大小。
mywindow=tk.Tk()
mywindow.title('今天吃什么')
mywindow.minsize(500,500)

3.设置窗口居中显示

我们首先 winfo_screenwidthwinfo_screenheight 函数获取屏幕的尺寸(screenwidthscreenheight),并根据屏幕尺寸计算了窗口的大小和位置。最后使用 geometry 函数将应用程序窗口设置到屏幕中央。

def getWindowsSize(width, height, screen_width, screen_height):
    x = int(screen_width / 2 - width / 2)
    y = int(screen_height / 2 - height / 2)
    return '{}x{}+{}+{}'.format(width, height, x, y)


screenwidth = mywindow.winfo_screenwidth()
# 得到屏幕宽度
screenheight = mywindow.winfo_screenheight()

print("screenheight:%s,screenheight:%S ",screenheight,screenwidth)

# x tkinter窗口距离屏幕左边距离
mywindow_x = 650
# y tkinter窗口距离屏幕上边距离
mywindow_y = 575
mywindow.geometry(getWindowsSize(mywindow_x,mywindow_y,screenwidth,screenheight))

4.设置切换按钮和当前食物的label以及图片展示切换方法

photoDefault 用来读取默认首图的图片,imageNameList用来存放imgs文件下的所有文件路径,nextChoice()用于当你不满意第一次随机的食物,点击 不满意?换一个 按钮时切换下一个食物。mylab 用来展示图片,eatlab 用来展示食物的中文名,mybut 用于切换。

photoDefault = ImageTk.PhotoImage(Image.open("imgs/今天吃点啥.gif"))

path = 'imgs/'
imagNamelist = os.listdir(path)

def nextChoice():
    # 重新排序文件
    random.shuffle(imagNamelist)
    imagePath=imagNamelist[0]
    print('今天吃',imagePath)
    finalImg = Image.open("imgs/"+imagePath)
    photo = ImageTk.PhotoImage(finalImg.resize((400, 400)))
    mylab.config(image = photo)
    mylab.image = photo
    mybut.config(text='不满意?换一个')
    eatlab.config(text=imagePath.split(".")[0])


mylab=tk.Label(master=mywindow,
               image= photoDefault
               )
mylab.pack()

eatlab=tk.Label(master=mywindow,
                text='今天吃点啥?',
                fg='white',
                bg='green',
                font=('微软雅黑',14),
                width=20,
                height=3
               )
eatlab.pack()

mybut=tk.Button(mywindow,
                text='点我决定',
                font=('微软雅黑',12),
                width=15,
                height=3,
                command=nextChoice
                )
mybut.pack()

mywindow.mainloop()

5.完整代码

import os
import tkinter as tk
import random
from PIL import Image, ImageTk

mywindow=tk.Tk()
mywindow.title('今天吃什么')
mywindow.minsize(500,500)

def getWindowsSize(width, height, screen_width, screen_height):
    x = int(screen_width / 2 - width / 2)
    y = int(screen_height / 2 - height / 2)
    return '{}x{}+{}+{}'.format(width, height, x, y)


screenwidth = mywindow.winfo_screenwidth()
# 得到屏幕宽度
screenheight = mywindow.winfo_screenheight()

print("screenheight:%s,screenheight:%S ",screenheight,screenwidth)

# x tkinter窗口距离屏幕左边距离
# mywindow_x = mywindow.winfo_x()
# # y tkinter窗口距离屏幕上边距离
# mywindow_y = mywindow.winfo_y()

# x tkinter窗口距离屏幕左边距离
mywindow_x = 650
# y tkinter窗口距离屏幕上边距离
mywindow_y = 575
mywindow.geometry(getWindowsSize(mywindow_x,mywindow_y,screenwidth,screenheight))


photoDefault = ImageTk.PhotoImage(Image.open("imgs/今天吃点啥.gif"))

path = 'imgs/'
imagNamelist = os.listdir(path)

def nextChoice():
    # 重新排序文件
    random.shuffle(imagNamelist)
    imagePath=imagNamelist[0]
    print('今天吃',imagePath)
    finalImg = Image.open("imgs/"+imagePath)
    photo = ImageTk.PhotoImage(finalImg.resize((400, 400)))
    mylab.config(image = photo)
    mylab.image = photo
    mybut.config(text='不满意?换一个')
    eatlab.config(text=imagePath.split(".")[0])




mylab=tk.Label(master=mywindow,
               image= photoDefault
               )
mylab.pack()

eatlab=tk.Label(master=mywindow,
                text='今天吃点啥?',
                fg='white',
                bg='green',
                font=('微软雅黑',14),
                width=20,
                height=3
               )
eatlab.pack()

mybut=tk.Button(mywindow,
                text='点我决定',
                font=('微软雅黑',12),
                width=15,
                height=3,
                command=nextChoice
                )
mybut.pack()

mywindow.mainloop()

四.打包成exe文件

1.安装pyinstaller打包程序

要想打包成windows下可以运行的exe可以使用pip安装如下依赖包

pip3 install pyinstaller

2.执行打包

pyinstaller -F -w eat2.py -n eatSomething.exe

图片

3.移动img文件,运行程序

打包完成后 会在 dist 目录生成 eatSomething.exe 应用程序,由于打包的时候我们并没有把 imgs 文件夹的图片拷贝进去,所以我们可以手动把 imgs 全部拷贝到 dist 文件夹下,当然你也可以 把你喜欢的食物照片放到 imgs 文件夹下面。

图片

图片

然后我们就可以双击 eatSomething.exe

图片

五.源码

公众号内回复【干饭】,按链接下载即可

作者:TOPEN
链接:https://juejin.cn/post/7231526222634582071

图片

接口自动化测试系列

UI自动化测试系列

自动化测试系列

抓包工具系列

功能测试系列

面试宝典系列

测试工具系列

团队管理系列

性能测试系列

图片

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/272267.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

计算器——可支持小数的任意四则运算(中缀表达式转为后缀表达式算法)

中缀表达式转为后缀表达式的原理过程主要包括以下步骤: 1. 初始化两个栈,一个用于存储操作数,一个用于存储运算符。2. 从左到右扫描中缀表达式的每个字符。3. 如果遇到数字,则直接将其压入操作数栈。4. 如果遇到运算符&#xff0c…

[vue]Echart使用手册

[vue]Echart使用手册 使用环境Echart的使用Echart所有组件和图表类型Echart 使用方法 使用环境 之前是在JQuery阶段使用Echart,直接引入Echart的js文件即可,现在是在vue中使用,不仅仅时echarts包,还需要安装vue-echarts: "…

性能暴增的Rope Crystal版本:红宝石(12.25)

文章目录 (零)版本介绍(一)主界面调整(二)模型与性能(三)创作纪念日 (零)版本介绍 🔗 Github仓库。 这次圣诞节更新主要是提升性能!&…

JavaScript:DOM节点

JavaScript:DOM节点 DOM节点查找节点父节点查找子节点查找兄弟节点查找 插入节点追加节点克隆节点 删除节点浏览器渲染模式回流重绘 DOM节点 DOM树中的每一个内容都称之为节点,主要包括元素节点,属性节点,文本节点等,本…

EasyCVR无人机推流+人数统计AI算法,助力公共场所人群密度管控

一、背景与需求 在公共场所和大型活动的管理中,人数统计和人群密度控制是非常重要的安全问题。传统的方法可能存在效率低下或准确度不足的情况,无法满足现代社会的需求。TSINGSEE青犀可以利用无人机推流AI人流量统计算法,基于计算机视觉技术…

22000mAh 电池,这款国产新机来了场「续航」震撼

见惯了主流智能手机,是时候上一波离谱新机震撼了。 三防手机这一细分类型,咱们普通用户可能接触得比较少; 但对于极限运动、野外探险爱好者来说,这玩意儿可是关键时候能救命的必备神器。 在真正严苛环境面前,性能啥的…

ES慢查询分析——性能提升6 倍

问题 生产环境频繁报警。查询跨度91天的数据,请求耗时已经来到了30s。报警的阈值为5s。 背景 查询关键词简单,为‘北京’ 单次仅检索两个字段 查询时间跨度为91天,覆盖数据为450亿数据 问题分析 使用profle分析,复现监控报警的…

【DevOps 工具链】搭建 项目管理软件 禅道

文章目录 1、简介2、环境要求3、搭建部署环境3.1. 安装Apache服务3.2. 安装PHP环境(以php7.0为例 )3.3. 安装MySQL服务 4、搭建禅道4.1、下载解压4.2、 配置4.2.1、 启动4.2.2、自启动4.2.3、确认是否开机启动 5、成功安装 1、简介 禅道是国产开源项目管…

nvprof:CUDA编程性能分析工具

nvprof分析工具使您能够从命令行收集和查看分析数据。nvprof能够收集CPU和GPU上与CUDA相关的活动的时间线,包括内核执行、内存传输、内存集和CUDA API调用以及CUDA内核的事件或度量。评测选项通过命令行选项提供给nvprof。分析结果在收集分析数据后显示在控制台中&a…

PS 修改图片为固定大小和固定内存

1. 改为固定大小 点击图像->图像大小 然后就可以根据你的需求进行更改了 2. 改为固定内存 点击文件->存储或者存储为web 然后就是如下界面: 点击确定之后,就会有如下界面,其中右边有图片内存的最大大小,三角形处可以来回…

详解Junit单元测试@Test及Assert断言(一学就会,通俗易懂版)

定义 快速入门(扩展:Assert断言) 断言机制 运行该类的所有测试类 Junit常用注解 示例 1. 2. 3. 4.实例方法初始化和释放资源 5.静态方法初始化和释放资源 一样的使用

[SWPUCTF 2021 新生赛]hardrce

[SWPUCTF 2021 新生赛]hardrce wp 参考博客&#xff1a;https://www.cnblogs.com/bkofyZ/p/17644820.html 代码审计 题目的代码如下&#xff1a; <?php header("Content-Type:text/html;charsetutf-8"); error_reporting(0); highlight_file(__FILE__); if(is…

2023年民宿管理系统排名前十的是哪些?哪一个的功能强大?

现在说起去旅游&#xff0c;很多都会选择订民宿&#xff0c;因为民宿装修风格更具个性化和本土气息&#xff0c;适合追求新潮的年轻人&#xff0c;拍照打卡效果很好。另外就是民宿布局和家里比较相似&#xff0c;出游人数比较多的话住着更方便。由于这股风潮的兴起&#xff0c;…

模型性能评估简介

模型评估 混淆矩阵 Positive - 正例Negative (N) - 负例 结果: 预测为正类别 预测为负类别 真实为正类别 True Positive (TP) False Negative (FN) 真实为负类别 False Positive (FP) True Negative (TN)TP - 预测 P, 实际 P, 模型预测正确FP - 预测 P, …

promise的使用和实例方法

前言 异步,是任何编程都无法回避的话题。在promise出现之前,js中也有处理异步的方案,不过还没有专门的api能去处理链式的异步操作。所以,当大量的异步任务逐个执行,就变成了传说中的回调地狱。 function asyncFn(fn1, fn2, fn3) {setTimeout(() > {//处理第一个异步任务fn1…

网工内推 | 技术支持、解决方案工程师,RHCA认证优先,带薪年假

01 天融信 招聘岗位&#xff1a;售后技术支持工程师 职责描述&#xff1a; 1.负责公司运营商态势安全项目系统远程维护与运营支持工作。 2.负责远程对态势平台、数据探针进行日常巡检&#xff0c;及时发现故障问题&#xff0c;并反馈处置。 3.负责远程支撑态势平台的功能考核&…

k8s是什么

生么是k8s&#xff1a; Kubernetes:8个字母省略&#xff0c;就是k8s 自动部署&#xff0c;自动扩展和管理容器化部署的应用程序的一个开源系统、 k8s是负责自动化运维管理多个容器化程序的集群&#xff0c;是一个功能强大的容器编排工具。 分布式和集群化的分布式进行容器管…

Elasticsearch:无需搜索 “Christmas” 即可找到有关圣诞节的书籍

随着假期的临近&#xff0c;我期待着变得舒适&#xff0c;拿起一本新书&#xff0c;享受轻松的时光。 但是使用搜索栏在线发现图书并不像看起来那么容易......大多数零售搜索引擎仅依赖于关键字搜索&#xff0c;当我们确切地知道我们正在寻找什么书名时&#xff0c;这很好&…

渗透测试 | php的webshell绕过方法总结

目录 1.php的异或运算 2.通过获取注释去绕过 3.利用字符的运算符​​​​​​​ 4.通过end函数代替[] 5.通过常量去绕过 6.字符串拼接双美元符 7.通过函数定义绕过 8.通过类定义&#xff0c;然后传参分割 9.多传参方式绕过​​​​​​​ 10.通过get_defined_function…

教你一分钟弄清屏幕SPI接口名称

相关文章 快速入门ESP32——开发环境配置Arduino IDE 快速入门ESP32——开发环境配置PlatformIO IDE 快速入门ESP32—— platformIO添加开源库和自己的开发库 一分钟弄清屏幕SPI接口名称 前言一、屏幕SPI接口名称二、与单片机连接总结 前言 最近&#xff0c;我在捣鼓CD屏幕的SP…