有趣python小程序系列之二
文章目录
- 前言
- 一、关不掉的窗口
- 二、代码部分
- 1.导入所需的库
- 2.生成主窗口
- 3.生成提问、加载图片
- 4.生成按钮
- 5.定义点击按钮时的响应函数
- 6.主函数部分
- 三、结果展示
前言
没想到那么多人关注阅读有趣系列之一飘落的银杏。看来大家更喜欢有趣的东西(学习这种东西没人看,哈哈哈哈)。那接着更有趣系列第二篇,如果看的人多的话还会继续更新这个系列,没人的话我就继续整理笔记吧 ~
一、关不掉的窗口
当你遇到某个喜欢妹子,不知道如何表达自己的好感时,可以给她发个小程序,让她选择是否喜欢你~把“不喜欢”这个按钮焊死,只有“喜欢”你才能关闭程序,强行达成共识,就可以抱得美人归了。
(纯属虚构,请勿实验,被拉黑了不要找我 )
本篇主要是利用python中的tkinter库来实现。
二、代码部分
1.导入所需的库
import tkinter as tk
from PIL import ImageTk
from tkinter import messagebox
from tkinter import *
import time
之所以导入time,是为了防止你被女神直接拉黑。
2.生成主窗口
可以根据后面加载的图片选择窗口的大小,窗口的文字可以根据自己的想法更改。
root = tk.Tk() #新建窗口
root.title('嘘~我喜欢你呀') #窗口名字
root.geometry('390x350+500+220') #窗口,385x400是大小,第1个加号是距离屏幕左边的宽,第2个加号是距离屏幕顶部的高。
root.mainloop() #保持窗口
3.生成提问、加载图片
效果如下所示,文字和颜色我都随意选的,你们可以根据注释进行更改。图片也是我随意选取的一张图,你们可以自己选择图片,需要注意的是需要把图片放入程序所在文件夹,在程序中更改加载图片的名字就行。Tips:图片大小的更改需要配合2.2生成窗口的大小,否则图片会显示不完全。
l1 = tk.Label(root, text='问你一个问题呀', font=('微软雅黑', 14), fg='red' )#第一行第一句话,可以根据自己的需要调整字体大小和想写的话
l1.grid()
l2 = tk.Label(root, text='你喜欢我吗?', font=('微软雅黑', 25), fg='blue') #第二行第一句话,可以根据自己的需要调整字体大小和想写的话
l2.grid(row=1, column=1, sticky=tk.E)
bm = ImageTk.PhotoImage(file='./test.jpg') ##加载图片,记得把图片放到程序运行的文件夹
l3 = tk.Label(root, image=bm)
l3.grid(row=2, columnspan=2)
4.生成按钮
这里生成的按钮是不带功能的,需要点击带功能的话,需要加入command,会在下一节中提到,所以如果在复制代码时记得别忘了在代码中加入command = 你命名的函数,例如:
b2 = tk.Button(root, text='不喜欢', width=4, height=1, command=nolove) #加入“不喜欢”的按钮和点击的动作
Tips:可以把“不喜欢”的按钮设置的小一点。
b1 = tk.Button(root, text='喜欢', width=18, height=2) #加入“喜欢”的按钮和点击的动作
b1.grid(row=3, column=0, sticky=tk.W)
b2 = tk.Button(root, text='不喜欢', width=4, height=1) #加入“不喜欢”的按钮和点击的动作
b2.grid(row=3, column=3, sticky=tk.E)
5.定义点击按钮时的响应函数
上一节只是生成了按钮,但不带点击响应功能,这一节我们定义一些响应函数,就可以做到交互了。
可以注意到我在 love()方法中加入了一个 if 判断,因为我把关闭的按键都写死了,窗口会一直关不掉,会越弹越多,只有通过任务管理器关闭,不会任务管理器的小姐姐就只能看着窗口越点越多,然后越想越气,把你拉黑。加入一个time库,再利用if判断,当窗口运行时间达到你设定的值时,点击喜欢即可关闭程序,单位是s,我这里设定的是60s后点击“喜欢”即可关闭程序。
def Love(): #定义点击“喜欢”时的动作love = Toplevel(root)love.geometry('300x150+240+200')love.title('好巧啊,我也是')label = Label(love, text='好巧,我也是', font=('楷体',15))label.pack()label1 = Label(love, text='留个电话可以吗', font=('楷体', 10))label1.pack()entry = Entry(love,font=('楷体', 15))entry.pack()btn = Button(love, text = '确定', width=10, height=2, command=Sure)btn.pack()love.protocol("WM_DELETE_WINDOW", closelove)if time.time() - start > 60: #设定一个时间,超过多少秒以后,点击”喜欢“可关闭closeall()def Sure():sure = Toplevel(root)sure.geometry('300x150+240+200')sure.title('我不信')label = Label(sure, text='除非你现在给我打电话', font=('楷体', 15))label.pack()label = Label(sure, text='5201314', font=('楷体', 15))label.pack()btn = Button(sure, text='好的', width=10, height=2, command=clicksure)btn.pack()sure.protocol("WM_DELETE_WINDOW", closelove)def nolove(): #定义点击“不喜欢”时的动作no_love = Toplevel(root)no_love.geometry('300x100+250+200')no_love.title('你肯定是骗我的')label = Label(no_love, text='再考虑考虑呗', font=('楷体',25))label.pack()btn = Button(no_love, text='好的', width=10, height=2, command=no_love.destroy)btn.pack()no_love.protocol("WM_DELETE_WINDOW", closenolve)def closeroot(): #定义点击关闭窗口的动作messagebox.showinfo(title='警告', message='不许关闭,好好回答')returndef closeall(): #定义关闭所有的方法root.destroy()def closelove(): #定义点击关闭喜欢时的动作messagebox.showinfo('不再考虑一下嘛', message='再考虑一下吧')returndef closenolve():nolove()def clicksure(): #定义点击确定打电话时的相应messagebox.showinfo('哼,你又骗我', message='我还没收到电话')return
6.主函数部分
再加入第5节的响应函数即可构成完整的程序。
if __name__ == '__main__':start = time.time()root = tk.Tk() #新建窗口root.title('嘘~我喜欢你呀') #窗口名字root.geometry('390x350+500+220') #窗口,385x400是大小,第1个加号是距离屏幕左边的宽,第2个加号是距离屏幕顶部的高。root.protocol("WM_DELETE_WINDOW", closeroot) #使窗口无法关闭l1 = tk.Label(root, text='问你一个问题呀', font=('微软雅黑', 14), fg='red' )#第一行第一句话,可以根据自己的需要调整字体大小和想写的话l1.grid()l2 = tk.Label(root, text='你喜欢我吗?', font=('微软雅黑', 25), fg='blue') #第二行第一句话,可以根据自己的需要调整字体大小和想写的话l2.grid(row=1, column=1, sticky=tk.E)bm = ImageTk.PhotoImage(file='./test.jpg') ##加载图片,记得把图片放到程序运行的文件夹l3 = tk.Label(root, image=bm)l3.grid(row=2, columnspan=2)b1 = tk.Button(root, text='喜欢', width=18, height=2, command=Love) #加入“喜欢”的按钮和点击的动作b1.grid(row=3, column=0, sticky=tk.W)b2 = tk.Button(root, text='不喜欢', width=4, height=1, command=nolove) #加入“不喜欢”的按钮和点击的动作b2.grid(row=3, column=3, sticky=tk.E)root.mainloop() #保持窗口
三、结果展示
运行程序后,点击不同按钮有不同响应,但无论如何交互都无法关掉程序,只能通过任务管理器或者等到了你设置的时间后,点击“喜欢”才能关闭程序。
学会了吗~赶紧写个程序打包发给你喜欢的妹子吧。Tips:拉黑了别找我(不会有人还不会打包成exe文件吧,不会吧不会吧,开个玩笑,不会的可以评论区留言)
以上,就是全部内容了,虽然简单,但是可以发挥的空间还有很多,比如可以再多定义几个互动动作,达到循环套外的效果,我这里只是简单的加了一些互动,大家可以发挥自己的想象力,继续多加点功能。
有一个需要特别提一下的就是,留个电话下面的文本框输入,后续没有再定义函数,并不能返回给我们,但其实我们可以再加入一部分实现对方输入号码点击确认后,将输入的内容发送到我们邮箱(前提对方联网了),如果需要的人多的话后续可以再水 写一篇如何将输入内容发送到邮箱。
完整代码后续会上传到github。
已上传:https://github.com/sw1122/interesting-PY-projects.git
系列之三预告:“颜值打分”
有趣python小程序系列之二相关推荐
- 有趣python小程序系列之一
文章目录 前言 一.飘落的银杏 二.代码部分 1.导入所需的库 2.生成斐波那契数列 3.定义生成叶子的方法 4.定义生成树的方法 5.主函数部分 三.结果展示 前言 关于学python的初衷,如图, ...
- 【微信小程序系列:二】小程序常用功能:跳转地图、扫一扫、人脸识别、拍照、拨打电话、调整屏幕亮度、文字可复制、监听截屏...
一.先言: (- ̄▽ ̄)-,hello,微信小程序系列第二篇,介绍下小程序里的前端常用功能api,可以快速copy使用~ 二.文字可复制: 小程序页面里的文字默认是没有长按复制功能的,需要套个标签来实 ...
- 深入小程序系列之二、Flutter 和小程序混编
背景 本文我们将开一下脑洞,在 Flutter 工程基础上下集成及运行小程序方案. 先看一下效果如下: 新建 Flutter 样例工程 Flutter 的安装 Flutter 的安装可参考https: ...
- Python之有趣的小程序
目录 前言 一.阶乘计算器 1.运行结果 2.源代码 3.知识点 (1)while的语法 (2) 注意 二.斐波那契数列 1.运行结果 2.源代码 3.知识点 三.猜数字游戏 1.运行结果 2.源代码 ...
- Python之有趣的小程序——猜数字2.0
目录 前言 一.前景回顾 二.思路讲解 三.猜数字2.0介绍 四.猜数字2.0源程序 五.程序讲解 1.基础部分 (1)while循环与for循环 (2)数值大小判断 2.再来一局 总结 前言 让大家 ...
- 【有趣的Python小程序】Python多个简单上手的库制作WalkLattice 走格子游戏 (思路篇)上
篇写上一个思路篇,那么今天我们就来完成这一项工作 源代码和配套文件 链接: https://caiyun.139.com/m/i?135ClY1yWrSKX 提取码:e4pq 复制内容打开中国移动云盘 ...
- python恶搞小程序-有趣的python小程序
有趣的python小程序 1.密码生成器x=int(input()) print(''.join(__import__('random').choice('QWERTYUIOPASDFGHJKLZXC ...
- 有趣的python小程序
有趣的python小程序 1.密码生成器 x=int(input()) print(''.join(__import__('random').choice('QWERTYUIOPASDFGHJKLZX ...
- python编有趣的小程序_有趣的python小程序
有趣的python小程序 1.密码生成器x=int(input()) print(''.join(__import__('random').choice('QWERTYUIOPASDFGHJKLZXC ...
最新文章
- R语言rev函数对数据对象(向量、dataframe通过行或者列)反序实战
- 其他类似GitBook的在线文档创作平台
- 快速傅里叶变换之后的结果含义
- Sprint计划列表
- 【转】:andriod 开发环境工具下载地址(2)
- c#下如何生成安装程序
- V-rep学习笔记:ROSInterface
- python中碰撞的代码_Python…Tkinter碰撞
- ASP.NETMVC Model验证(五)
- Activiti接受任务(receiveTask)
- fast recovery area oracle,oracle Fast Recovery Area的管理
- 详解DenseNet(密集连接的卷积网络)
- haswell架构_一个月拥有Intel Haswell原型
- Golang可能会踩的58个坑之中级篇
- hermite spline
- 【UVA11478】Halum (最短路解差分约束)
- 谈谈MySQL如何选择float, double, decimal
- 运营和网站管理中常用的概念词汇PV/UV/DAU
- onsubmit表单提交简单使用
- 关于BatchNorm的理解与讨论