Python+tkinter编写一个最近很火的强制表白神器
作者:微小冷 发布时间:2022-10-25 07:42:10
标签:Python,tkinter,表白,神器
尽管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


猜你喜欢
- 很多DBA目前还停留在Oracle 9i或者10g,究其原因有可能是Oracle 11g的价格问题。本文将为大家讲解在Windows 7下安
- PHP levenshtein() 函数实例计算两个字符串之间的 Levenshtein 距离:<?php echo levensht
- flask_wtf是flask框架的表单验证模块,可以很方便生成表单,也可以当做json数据交互的验证工具,支持热插拔。安装pip inst
- 最近实习需要对若干ppt进行格式上的调整,主要就是将标题的位置、对齐方式、字体等统一,人工修改又麻烦又容易错。因此结合网上的pptx包资料,
- SQL1: --1、查看表空间的名称及大小 SELECT t.tablespace_name, round(SUM(bytes / (102
- 如下所示:import timedef date_compare(item1, item2): t1 = time.mktime(time.
- IntelliJ IDEA 2021最新激活码超详细教程,成功激活到2099年。每天专业人士测试,保证可以使用才分享给大家的,放心大胆使用哈
- github源码地址:https://github.com/kuishou68/python各类图表的实现效果爬取的说说内容个性化说说内容词
- 可变参数可变参数应该最简单,在C/C++和Java等语言中都有,就是用*号来表示,例如def testArg(*arg)你可以传入任意多个元
- windows系统下Python环境的搭建step1:下载Python程序 https://www.python.org/downloads
- 在上一篇Python接口自动化测试系列文章:Python接口自动化浅析requests请求封装原理,主要通过源码分析,总结出一套简洁的请求类
- 本文实例讲述了python获取Linux下文件版本信息、公司名和产品名的方法,分享给大家供大家参考。具体如下:区别于前文所述。本例是在lin
- 使用到的函数是curl_init, curl_setopt, curl_exec,curl_close。默认是GET方法,可以选择是否使用H
- 译序:本文提到了一种很不错的实现跨浏览器圆角的解决方案,但是说的不够全面,前端观察最近将整理更多更全面的资源给大家,敬请期待。前一段时间,我
- 看看下面:<%Set objQuery = Server.CreateObject("ixss
- MyISAM:默认的MySQL插件式存储引擎,它是在Web、数据仓储和其他应用环境下最常使用的存储引擎之一。注意,通过更改 STORAGE_
- 爬取”顶点小说网“《纯阳剑尊》代码import requestsfrom bs4 import BeautifulSoup# 反爬heade
- Python没有类似于Java的private关键字, 但也可以为类定义私有属性. 只需将属性命名变为以__开头, 例如 __field.示
- Python字符串处理字符串输入:my_string = raw_input("please input a word:"
- 0. 学习目标在顺序存储方式中,根据数据元素的序号就可随机存取表中任何一个元素,但同时在插入和删除运算需要移动大量的元素,造成算法效率较低。