前言
没想到那么多人关注阅读有趣系列之一飘落的银杏。看来大家更喜欢有趣的东西(学习这种东西没人看,哈哈哈哈)。那接着更有趣系列第二篇,如果看的人多的话还会继续更新这个系列,没人的话我就继续整理笔记吧 ~
一、关不掉的窗口
当你遇到某个喜欢妹子,不知道如何表达自己的好感时,可以给她发个小程序,让她选择是否喜欢你~把“不喜欢”这个按钮焊死,只有“喜欢”你才能关闭程序,强行达成共识,就可以抱得美人归了。
(纯属虚构,请勿实验,被拉黑了不要找我 )
本篇主要是利用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='不许关闭,好好回答')
return
def closeall(): #定义关闭所有的方法
root.destroy()
def closelove(): #定义点击关闭喜欢时的动作
messagebox.showinfo('不再考虑一下嘛', message='再考虑一下吧')
return
def 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
系列之三预告:“颜值打分”