相信大家都看过在网络上有那种表白神器,就是那种不同意就不能关闭窗口,这样的技术在小白眼中特别高级,但身为技术人员的我们,这样的东西还不是小菜一碟,没有人表白咱们咱还不能自我表白嘛

<>前置准备

我们这里使用的编程语言是Python,使用的库是tkinter,还有其他的一些模块如requests等

其中的第三方库有requests、PIL

安装方法
pip install 库名称
此外,我们打包exe文件需要用到pyinstaller,安装方法也是pip

<>窗口设计

我们先来做一个好看的窗口,只有这样才能获得女神的芳心

关键代码如下
from tkinter import * from tkinter import messagebox from requests import get
from PIL import Image,ImageTk import sys class Window(object): def __init__(self
): self.window=Tk() self.title="一个爱慕你的小哥哥" self.size=(500,340) self.image=Image.
open('./love.jpg') def show(self): self.window.geometry("%dx%d"%self.size) self.
window.title(self.title) label1=Label(self.window,text="小姐姐,我喜欢你很久了",font=(
"微软雅黑",15)).place(x=0,y=0) tk_image=ImageTk.PhotoImage(self.image) img_label=
Label(self.window,image=tk_image).place(x=0,y=40) label2=Label(self.window,text=
"你同意我吗?",font=('微软雅黑',30),fg='red').place(x=220,y=150) agree_b=Button(self.
window,text="同意",bg="#4e6ef2",fg="#fff",font=('微软雅黑',20),command=lambda :self.
agree()) agree_b.place(x=40,y=260) disagree_b=Button(self.window,text="不同意",bg=
"#4e6ef2",fg="#fff",font=('微软雅黑',20),command=lambda :self.disagree()) disagree_b
.place(x=270,y=260) self.window.mainloop() def agree(self): pass def disagree(
self): pass def try_to_close_window(self): pass if __name__ == '__main__':
window=Window() window.show()
我这里还准备了一张图片,图片是我从网上找的,然后进行了等比例缩放,可自行保存

这样的话,我们就成功的有了这样一个界面

<>事件监听

当我们按下不同意时,会显示一个对话框,当我们按下关闭按钮时,会显示一个对话框,当我们按下同意时,会按下一个对话框后退出程序,那我们是如何实现的

显示对话框
我们通过tkinter模块的messagebox来显示对话框
messagebox.showinfo(标题,内容)
然后我们将代码修改如下
from tkinter import * from tkinter import messagebox from requests import get
from PIL import Image,ImageTk import sys class Window(object): def __init__(self
): self.window=Tk() self.title="一个爱慕你的小哥哥" self.size=(500,340) self.image=Image.
open('./love.jpg') def show(self): self.window.geometry("%dx%d"%self.size) self.
window.title(self.title) label1=Label(self.window,text="小姐姐,我喜欢你很久了",font=(
"微软雅黑",15)).place(x=0,y=0) tk_image=ImageTk.PhotoImage(self.image) img_label=
Label(self.window,image=tk_image).place(x=0,y=40) label2=Label(self.window,text=
"你同意我吗?",font=('微软雅黑',30),fg='red').place(x=220,y=150) agree_b=Button(self.
window,text="同意",bg="#4e6ef2",fg="#fff",font=('微软雅黑',20),command=lambda :self.
agree()) agree_b.place(x=40,y=260) disagree_b=Button(self.window,text="不同意",bg=
"#4e6ef2",fg="#fff",font=('微软雅黑',20),command=lambda :self.disagree()) disagree_b
.place(x=270,y=260) self.window.mainloop() def agree(self): messagebox.showinfo(
"","我也爱你,么么哒") sys.exit() def disagree(self): messagebox.showinfo("","不同意是不行的哦")
def try_to_close_window(self): pass if __name__ == '__main__': window=Window()
window.show()
窗口关闭按钮监听
当关闭按钮按下时,我们会弹出一个对话框,那么我们是如何实现对关闭按钮的监听的?

我们可以通过Tk对象的protocol方法来设置
Tk.protocol("WM_DELETE_WINDOW",function)
其中function就是我们在按下按钮后要执行的函数

完整代码如下
from tkinter import * from tkinter import messagebox from requests import get
from PIL import Image,ImageTk import sys class Window(object): def __init__(self
): self.window=Tk() self.title="一个爱慕你的小哥哥" self.size=(500,340) self.image=Image.
open('./love.jpg') def show(self): self.window.geometry("%dx%d"%self.size) self.
window.title(self.title) label1=Label(self.window,text="小姐姐,我喜欢你很久了",font=(
"微软雅黑",15)).place(x=0,y=0) tk_image=ImageTk.PhotoImage(self.image) img_label=
Label(self.window,image=tk_image).place(x=0,y=40) label2=Label(self.window,text=
"你同意我吗?",font=('微软雅黑',30),fg='red').place(x=220,y=150) agree_b=Button(self.
window,text="同意",bg="#4e6ef2",fg="#fff",font=('微软雅黑',20),command=lambda :self.
agree()) agree_b.place(x=40,y=260) disagree_b=Button(self.window,text="不同意",bg=
"#4e6ef2",fg="#fff",font=('微软雅黑',20),command=lambda :self.disagree()) disagree_b
.place(x=270,y=260) self.window.protocol("WM_DELETE_WINDOW",lambda :self.
try_to_close_window()) self.window.mainloop() def agree(self): messagebox.
showinfo("","我也爱你,么么哒") sys.exit() def disagree(self): messagebox.showinfo("",
"不同意是不行的哦") def try_to_close_window(self): messagebox.showinfo("",'不同意是不能关闭窗口的')
if __name__ == '__main__': window=Window() window.show()
<>打包exe

我们打开dos,cd到文件目录,然后输入
pyinstaller -F 文件名
例如我给我的文件命名为love.py,我就输入pyinstaller -F love.py
打包成功后就是这样

这时我们同目录会出现__pycache__、dist、build三个文件夹,在dist中就是我们要的exe文件了,其他的两个文件夹就可以删了

然后就可以把文件发给女神了,发的时候记得把图片也带上

技术
下载桌面版
GitHub
Gitee
SourceForge
百度网盘(提取码:draw)
云服务器优惠
华为云优惠券
腾讯云优惠券
阿里云优惠券
Vultr优惠券
站点信息
问题反馈
邮箱:[email protected]
吐槽一下
QQ群:766591547
关注微信