文章目录

  • 前言
  • 一、关不掉的窗口
  • 二、代码部分
    • 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小程序系列之二相关推荐

  1. 有趣python小程序系列之一

    文章目录 前言 一.飘落的银杏 二.代码部分 1.导入所需的库 2.生成斐波那契数列 3.定义生成叶子的方法 4.定义生成树的方法 5.主函数部分 三.结果展示 前言 关于学python的初衷,如图, ...

  2. 【微信小程序系列:二】小程序常用功能:跳转地图、扫一扫、人脸识别、拍照、拨打电话、调整屏幕亮度、文字可复制、监听截屏...

    一.先言: (- ̄▽ ̄)-,hello,微信小程序系列第二篇,介绍下小程序里的前端常用功能api,可以快速copy使用~ 二.文字可复制: 小程序页面里的文字默认是没有长按复制功能的,需要套个标签来实 ...

  3. 深入小程序系列之二、Flutter 和小程序混编

    背景 本文我们将开一下脑洞,在 Flutter 工程基础上下集成及运行小程序方案. 先看一下效果如下: 新建 Flutter 样例工程 Flutter 的安装 Flutter 的安装可参考https: ...

  4. Python之有趣的小程序

    目录 前言 一.阶乘计算器 1.运行结果 2.源代码 3.知识点 (1)while的语法 (2) 注意 二.斐波那契数列 1.运行结果 2.源代码 3.知识点 三.猜数字游戏 1.运行结果 2.源代码 ...

  5. Python之有趣的小程序——猜数字2.0

    目录 前言 一.前景回顾 二.思路讲解 三.猜数字2.0介绍 四.猜数字2.0源程序 五.程序讲解 1.基础部分 (1)while循环与for循环 (2)数值大小判断 2.再来一局 总结 前言 让大家 ...

  6. 【有趣的Python小程序】Python多个简单上手的库制作WalkLattice 走格子游戏 (思路篇)上

    篇写上一个思路篇,那么今天我们就来完成这一项工作 源代码和配套文件 链接: https://caiyun.139.com/m/i?135ClY1yWrSKX 提取码:e4pq 复制内容打开中国移动云盘 ...

  7. python恶搞小程序-有趣的python小程序

    有趣的python小程序 1.密码生成器x=int(input()) print(''.join(__import__('random').choice('QWERTYUIOPASDFGHJKLZXC ...

  8. 有趣的python小程序

    有趣的python小程序 1.密码生成器 x=int(input()) print(''.join(__import__('random').choice('QWERTYUIOPASDFGHJKLZX ...

  9. python编有趣的小程序_有趣的python小程序

    有趣的python小程序 1.密码生成器x=int(input()) print(''.join(__import__('random').choice('QWERTYUIOPASDFGHJKLZXC ...

最新文章

  1. R语言rev函数对数据对象(向量、dataframe通过行或者列)反序实战
  2. 其他类似GitBook的在线文档创作平台
  3. 快速傅里叶变换之后的结果含义
  4. Sprint计划列表
  5. 【转】:andriod 开发环境工具下载地址(2)
  6. c#下如何生成安装程序
  7. V-rep学习笔记:ROSInterface
  8. python中碰撞的代码_Python…Tkinter碰撞
  9. ASP.NETMVC Model验证(五)
  10. Activiti接受任务(receiveTask)
  11. fast recovery area oracle,oracle Fast Recovery Area的管理
  12. 详解DenseNet(密集连接的卷积网络)
  13. haswell架构_一个月拥有Intel Haswell原型
  14. Golang可能会踩的58个坑之中级篇
  15. hermite spline
  16. 【UVA11478】Halum (最短路解差分约束)
  17. 谈谈MySQL如何选择float, double, decimal
  18. 运营和网站管理中常用的概念词汇PV/UV/DAU
  19. onsubmit表单提交简单使用
  20. 关于BatchNorm的理解与讨论

热门文章

  1. IF_SUMIF_COUNTIF三大条件函数
  2. c++成员函数使用输出长方体的长宽高
  3. 易嘉CEO陈硕:从程序员之殇,看中小微企业财税现状
  4. Spark性能调优总结
  5. GridView动态添加一编辑行
  6. 郭家宝2012年写的PPT,讲解Y组合子,讲得很好
  7. 统一身份认证实现,推广的可能性及优缺点?
  8. 汇编语言 实现1.将数据区buf1中的10个数,传送到数据区buf2 2.计算buf1数据的累加和
  9. PDF Search 10.3 PDF文档搜索工具
  10. 采访Presto作者Christopher Berner