# 1. 导入所需库
import tkinter as tk # 导入tkinter库,并重命名为tk(Python内置的GUI库)
from tkinter import messagebox # 从tkinter导入消息框模块(用于弹出提示框)
from random import random # 从random库导入random函数(生成0-1之间的随机浮点数)
# 2. 创建主窗口并设置基础属性
root = tk.Tk() # 初始化Tkinter主窗口,root是主窗口对象root.geometry('500x300+100+100') # 设置窗口大小(宽500px,高300px)和初始位置(距离屏幕左100px,上100px)
root.title('发财信') # 设置窗口标题为“发财信”
# 3. 创建第一个框架(frame1):存放初始界面的内容
frame1 = tk.Frame(root) # 在主窗口root中创建一个框架(用于分组管理控件)
frame1.pack() # 将frame1添加到主窗口(默认垂直排列)
# 3.1 frame1中添加文本标签:“尊敬的各位领导”
tk.Label(
frame1, # 父容器为frame1
text='尊敬的各位领导:', # 显示的文本内容
font=24, # 字体大小(简化写法,完整写法是('字体名', 字号))
padx=30, # 水平内边距(文字与标签边框的水平距离)
pady=30 # 垂直内边距(文字与标签边框的垂直距离)
).pack(side=tk.LEFT, anchor=tk.N) # 靠左排列,锚点为北(顶部)
# 3.2 frame1中添加图片标签
img = tk.PhotoImage(file='Ican.png') # 加载本地图片文件(注意:仅支持png/gif格式,路径要正确)
label_img = tk.Label(
frame1,
image=img, # 绑定加载的图片
padx=30,
pady=30,
bd=0 # 边框宽度设为0(去掉图片边框)
)
label_img.pack(side=tk.LEFT, anchor=tk.N) # 图片标签靠左排列,锚点为北
# 3.3 frame1中添加“发财人:夏林一”标签
tk.Label(
frame1,
text='发财人:夏林一',
height=25, # 标签高度(单位是字符高度)
font=24,
padx=30,
pady=30,
anchor=tk.S # 锚点为南(底部,文字在标签内靠下显示)
).pack(side=tk.LEFT) # 靠左排列
# 3.4 加载按钮图片(同意/拒绝按钮共用一张图,可自行替换)
yes_img = tk.PhotoImage(file='button.png') # 同意按钮的图片
no_img = tk.PhotoImage(file='button.png') # 拒绝按钮的图片
# 3.5 创建同意/拒绝按钮
yes_btn = tk.Button(frame1, image=yes_img, bd=0) # 同意按钮(无边框)
no_btn = tk.Button(frame1, image=no_img, bd=0) # 拒绝按钮(无边框)
# 3.6 定位按钮位置(相对布局)
yes_btn.place(relx=0.3, rely=0.8, anchor=tk.CENTER) # 同意按钮:相对x轴30%,相对y轴80%,锚点居中
no_btn.place(relx=0.7, rely=0.8, anchor=tk.CENTER) # 拒绝按钮:相对x轴70%,相对y轴80%,锚点居中
# 4. 创建第二个框架(frame2):存放点击“同意”后显示的内容
frame2 = tk.Frame(root) # 创建frame2(初始默认不显示)
# 注意:这里先不pack,点击同意后再显示
# 4.1 frame2中添加搞笑文本标签
tk.Label(
frame2,
text='老板大人,臣要发财了\n这一发,可能就是一辈子了\n!!!!o(* ̄▽ ̄*)ブ!!!', # 换行用\n
font=('黑体',18), # 完整字体设置:字体名+字号
justify=tk.LEFT, # 文本左对齐
height=300, # 标签高度
fg='red', # 文字颜色为红色
padx=50 # 水平内边距
).pack()
# 4.2 frame2中添加“退出”按钮
tk.Button(
frame2,
text='退出',
command=root.quit # 点击后执行root.quit():关闭窗口
).place(relx=0.9, rely=0.8) # 相对布局:靠右下
# 5. 核心逻辑函数定义
# 5.1 关闭窗口的拦截函数:点击右上角×时触发
def on_exit():
# 弹出警告消息框:标题“提示”,内容“此路不通”
messagebox.showwarning(title='提示',message='此路不通')
# 绑定窗口关闭事件:替换默认的关闭行为为on_exit函数
root.protocol('WM_DELETE_WINDOW', on_exit)
# 5.2 拒绝按钮的移动函数:鼠标移入按钮时触发
def move(event): # event是事件对象(Tkinter绑定事件时自动传入)
# 重新定位拒绝按钮:relx/rely取0-1随机值,实现按钮乱跑
no_btn.place(relx=random(),rely=random(), anchor=tk.CENTER)
# 绑定事件:鼠标移入no_btn按钮时,执行move函数
no_btn.bind('<Enter>',move)
# 5.3 同意按钮的触发函数:点击“同意”后切换界面
def sure():
frame1.pack_forget() # 隐藏frame1(只是隐藏,不是删除)
frame2.pack() # 显示frame2
# 5.4 给同意按钮绑定点击事件:点击后执行sure函数 yes_btn.config(command=sure)
# 6. 启动主事件循环:让窗口保持显示并响应交互
root.mainloop()
-------------------------------代码部分结束--------------------------------