文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Python+tkinter编写一个最近很火的强制表白神器

2023-05-14 08:04

关注

尽管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是一个全局变量,表示字体及其大小,在labelbutton创建的时候,会通过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函数,不仅可以再创建窗口的时候声明窗口位置,而且可以随时随地修改窗口的位置。这样一来,当鼠标浮动在按钮上的时候,甚至还没点击,窗口就躲开了。

效果如下

到此这篇关于Python+tkinter编写一个最近很火的强制表白神器的文章就介绍到这了,更多相关Python tkinter制作强制表白神器内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯