Python+tkinter编写一个最近很火的强制表白神器
作者:微小冷 时间:2022-10-25 07:42:10
尽管Python提供了多个消息框已经能够满足大部分正常人的需求,但并不够灵活,所以有的时候不得不自定义消息框。
新建窗口
消息框的本质是一个窗口、一段信息,外加两个按钮
import tkinter as tk
FONT= ("微软雅黑", 20)
def msgBox(txt, yesFunc=None, noFunc=None):
win = tk.Tk()
win.title("started")
win.geometry("400x200+300+100")
label = tk.Label(win,text=txt, font=FONT)
label.pack(side=tk.TOP,expand=tk.YES,fill=tk.BOTH)
btnYes = tk.Button(win, text="是", width=8,
font=FONT, command = lambda : yesFunc(win))
btnYes.pack(side=tk.LEFT,expand=tk.YES,fill=tk.Y)
btnNo = tk.Button(win, text="否", width=8,font=FONT)
btnNo.bind("<Enter>", lambda evt: noFunc(evt, win))
btnNo.pack(side=tk.RIGHT,expand=tk.YES,fill=tk.Y)
msgBox("你是不是喜欢我?")
FONT
是一个全局变量,表示字体及其大小,在label
和button
创建的时候,会通过font
参数进行设置。
pack
是一种布局方式,顾名思义,就是打包。如果把窗口想象成是一个箱子,那么打包肯定是哪里有空打哪里。比如最下面放了一层衣服,没地方放了只能放在第二层;如果第二层只放了一个砖头,那么其他位置还有空间,于是可以贴着砖头再放一个砖头。
在上面的案例中,将label
从上面压下来,然后下面左右两侧分别放置一个按钮。
其中,无论是
还是否
,都需要对窗口进行操作,所以回调函数使用了lambda
表达式,从而能够对窗口进行操作。<Enter>
表示当鼠标浮动在组件上方时响应,其回调函数需要输入一个参数evt
。
效果如下
关闭窗口
接下来写是
的逻辑,即关闭现有窗口后,弹出一个新的窗口,新的窗口只需要有一个
def yesFunc(win):
x, y = win.winfo_x(), win.winfo_x()
win.destroy()
win = tk.Tk()
win.geometry(f"400x200+{x}+{y}")
txt = "放学去房后小树林\n不见不散\n嘿嘿嘿"
label = tk.Label(win,text=txt, font=FONT)
label.pack(side=tk.TOP,expand=tk.YES,fill=tk.BOTH)
btn = tk.Button(win, text="好的呀", width=12, font=FONT,
command=lambda:win.destroy())
btn.pack(side=tk.TOP)
msgBox("你是不是喜欢我?", yesFunc)
destroy
即关闭当前窗口。在当前窗口被关闭后,在原来窗口的位置处新建一个窗口,win_winfo_x, win_winfo_y
用于获取窗口位置。
效果如下
挪动窗口
然后写否
的逻辑,当鼠标悬浮在否
的按钮上时,挪动窗口的位置。由于
import random
def randInt(a, b):
r = random.randint(-a, a)
while abs(r) < abs(b):
r = random.randint(-a, a)
return r
def noFunc(evt, win):
x, y = win.winfo_x(), win.winfo_x()
x += randInt(100, 80)
y += randInt(30, 20)
win.geometry(f"400x200+{x}+{y}")
msgBox("你是不是喜欢我?", yesFunc, noFunc)
通过geometry
函数,不仅可以再创建窗口的时候声明窗口位置,而且可以随时随地修改窗口的位置。这样一来,当鼠标浮动在否
按钮上的时候,甚至还没点击,窗口就躲开了。
效果如下
来源:https://blog.csdn.net/m0_37816922/article/details/129906906
标签:Python,tkinter,表白,神器
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Python五种下划线详解
2021-10-02 02:45:38
![](https://img.aspxhome.com/file/2023/6/91846_0s.png)
Python中turtle绘图模块的详细讲解
2022-12-30 02:38:27
![](https://img.aspxhome.com/file/2023/9/120449_0s.png)
Python3里的super()和__class__使用介绍
2022-06-27 09:29:35
Rs.Open参数说明
2008-05-12 22:43:00
python动态网站爬虫实战(requests+xpath+demjson+redis)
2023-03-30 20:01:51
![](https://img.aspxhome.com/file/2023/4/98784_0s.png)
Python中三种花式打印的示例详解
2022-06-27 06:51:11
《细节决定交互设计的成败》
2009-06-02 11:23:00
![](https://img.aspxhome.com/file/UploadPic/20096/2/01-29s.jpg)
常用的javascript设计模式
2023-08-18 06:54:27
Python合并pdf文件的工具
2021-09-09 23:28:47
![](https://img.aspxhome.com/file/2023/3/77713_0s.png)
MySQL数据库生产环境的维护工作总结的经验
2011-12-01 10:20:52
python深度学习tensorflow训练好的模型进行图像分类
2023-02-20 20:40:37
![](https://img.aspxhome.com/file/2023/7/76087_0s.jpg)
Ubuntu下Python+Flask分分钟搭建自己的服务器教程
2023-11-12 04:37:43
![](https://img.aspxhome.com/file/2023/2/63182_0s.jpg)
Python中常见的导入方式总结
2023-03-04 18:22:03
js三维正方体(兼容ie/ff)
2008-04-12 14:38:00
![](https://img.aspxhome.com/file/UploadPic/20084/12/2008412144141850s.gif)
基于PHP读取csv文件内容的详解
2023-11-16 04:17:48
4款Javascript放大镜特效脚本
2009-10-14 20:46:00
![](https://img.aspxhome.com/file/UploadPic/200910/14/javascript-9-7-6j-25s.jpg)
解密SQL Server数据库系统的编译
2009-03-16 17:33:00
oracle日期分组查询的完整实例
2023-06-26 10:14:13
![](https://img.aspxhome.com/file/2023/4/63374_0s.png)
制作一个更漂亮一些的多选列表框
2007-10-16 13:04:00
![](https://img.aspxhome.com/file/UploadPic/200710/16/2007101613723940s.gif)
django 装饰器 检测登录状态操作
2021-03-13 16:40:40
![](https://img.aspxhome.com/file/2023/2/97592_0s.jpg)