Python实现随机弹窗新年祝福:Tkinter多线程与动态配色方案
本文介绍如何利用Python的Tkinter模块结合多线程技术,实现一个随机颜色与字体的新年祝福弹窗程序。通过正则表达式从文本文件中动态提取颜色代码和祝福语,并在屏幕随机位置生成窗口,为节日互动提供趣味性的编程示例。
前言
前言
在猪年除夕夜的亲人群中抢红包时,我突发奇想,希望用Python制作一个有趣的新年祝福程序,让亲友们开心一下。由于当时Python基础较为薄弱,我查阅了相关博客,并在某位网友提供的初始代码基础上进行了改进,增加了弹窗的多样性。撰写这篇博客既是为了纪念这一过程,也是为了整理相关文件。
代码准备
代码准备
主要代码结构如下,其中仍有诸多可以优化的空间,待未来深入掌握Python后,可再次回顾并完善。
核心代码实现
import tkinter as tk
import random
import threading # 使用多线程
import time
import functions # functions是自己建立的一个Python文件,后面会简单介绍一下
def dow():
color_list = functions.colors()
font_list = ['黑体', '宋体', '仿宋', '微软雅黑', '楷体', '隶书', '华文琥珀', '幼圆', '华文行楷', '新宋体']
text_list = functions.blesses()
window = tk.Tk()
width=window.winfo_screenwidth()
height=window.winfo_screenheight()
a=random.randrange(0,width)
b=random.randrange(0,height)
window.title('来自一雄的新年祝福') # 一雄是我的名
window.geometry("300x100"+"+"+str(a)+"+"+str(b))
tk.Label(window,
text=random.sample(text_list, 1), # 标签的文字
bg= random.sample(color_list, 1), # 背景颜色
font=(random.sample(font_list,1), 17), # 字体和字体大小
width=20, height=20 # 标签长宽
).pack() # 固定窗口位置
window.mainloop()
def bless(x):
threads = []
for i in range(x): # 需要的弹框数量
t = threading.Thread(target=dow)
threads.append(t)
time.sleep(0.1)
threads[i].start()
def main():
num = int(input('请输入需要的祝福数量:'))
bless(num)
if __name__ == '__main__':
main()
功能模块详解
functions文件介绍
最初的代码在dow()函数中直接硬编码了背景颜色和祝福语,导致视觉效果较为单一。为此,我从网上搜索了Python tkinter模块支持的颜色列表,并利用正则表达式提取颜色代号,使程序在运行时能随机抽取一种背景色;祝福语也采用同样的随机抽取机制。虽然理论上字体也可以随机选择,但考虑到部分字体可能不被系统支持,我手动从Word中挑选了一些常见字体并存储在一个列表中,以确保显示效果稳定。
import re
def colors():
"""提取所有的颜色"""
color_list = []
with open('colors.txt', 'r', encoding = 'utf-8') as fo:
for i in fo.readlines():
ret = re.findall(r"[A-Z][a-z][A-Za-z]*",i) # 提取英文
color_list += ret # ret得到的是一个列表,相加使得列表合并
return color_list
def blesses():
"""提取祝福语"""
bless_list = []
with open('blesses.txt', 'r', encoding = 'utf-8') as fo:
for i in fo.readlines():
pattern =re.compile(u"[\u4e00-\u9fa5]+") # 提取全部的中文
result=re.findall(pattern, i)
bless_list += result
return bless_list
*颜色文件如下:*
,#FFC0CB Pink 粉红
,#DC143C Crimson 深红/猩红
,#FFF0F5 LavenderBlush 淡紫红
,#DB7093 PaleVioletRed 弱紫罗兰红
,#FF69B4 HotPink 热情的粉红
,#FF1493 DeepPink 深粉红
,#C71585 MediumVioletRed 中紫罗兰红
,#DA70D6 Orchid 暗紫色/兰花紫
,#D8BFD8 Thistle 蓟色
,#DDA0DD Plum 洋李色/李子紫
,#EE82EE Violet 紫罗兰
,#FF00FF Magenta 洋红/玫瑰红
,#FF00FF Fuchsia 紫红/灯笼海棠
,#8B008B DarkMagenta 深洋红
,#800080 Purple 紫色
,#BA55D3 MediumOrchid 中兰花紫
,#9400D3 DarkViolet 暗紫罗兰
,#9932CC DarkOrchid 暗兰花紫
,#4B0082 Indigo 靛青/紫兰色
,#8A2BE2 BlueViolet 蓝紫罗兰
,#9370DB MediumPurple 中紫色
,#7B68EE MediumSlateBlue 中暗蓝色/中板岩蓝
,#6A5ACD SlateBlue 石蓝色/板岩蓝
,#483D8B DarkSlateBlue 暗灰蓝色/暗板岩蓝
,#E6E6FA Lavender 淡紫色/熏衣草淡紫
,#F8F8FF GhostWhite 幽灵白
,#0000FF Blue 纯蓝
,#0000CD MediumBlue 中蓝色
,#191970 MidnightBlue 午夜蓝
,#00008B DarkBlue 暗蓝色
,#000080 Navy 海军蓝
,#4169E1 RoyalBlue 皇家蓝/宝蓝
,#6495ED CornflowerBlue 矢车菊蓝
,#B0C4DE LightSteelBlue 亮钢蓝
,#778899 LightSlateGray 亮蓝灰/亮石板灰
,#708090 SlateGray 灰石色/石板灰
,#1E90FF DodgerBlue 闪兰色/道奇蓝
,#F0F8FF AliceBlue 爱丽丝蓝
,#4682B4 SteelBlue 钢蓝/铁青
,#87CEFA LightSkyBlue 亮天蓝色
,#87CEEB SkyBlue 天蓝色
,#00BFFF DeepSkyBlue 深天蓝
,#ADD8E6 LightBlue 亮蓝
,#B0E0E6 PowderBlue 粉蓝色/火药青
,#5F9EA0 CadetBlue 军兰色/军服蓝
,#F0FFFF Azure 蔚蓝色
,#E0FFFF LightCyan 淡青色
,#AFEEEE PaleTurquoise 弱绿宝石
,#00FFFF Cyan 青色
,#00FFFF Aqua 浅绿色/水色
,#00CED1 DarkTurquoise 暗绿宝石
,#2F4F4F DarkSlateGray 暗瓦灰色/暗石板灰
,#008B8B DarkCyan 暗青色
,#008080 Teal 水鸭色
,#48D1CC MediumTurquoise 中绿宝石
,#20B2AA LightSeaGreen 浅海洋绿
,#40E0D0 Turquoise 绿宝石
,#7FFFD4 Aquamarine 宝石碧绿
,#66CDAA MediumAquamarine 中宝石碧绿
,#00FA9A MediumSpringGreen 中春绿色
,#F5FFFA MintCream 薄荷奶油
,#00FF7F SpringGreen 春绿色
,#3CB371 MediumSeaGreen 中海洋绿
,#2E8B57 SeaGreen 海洋绿
,#F0FFF0 Honeydew 蜜色/蜜瓜色
,#90EE90 LightGreen 淡绿色
,#98FB98 PaleGreen 弱绿色
,#8FBC8F DarkSeaGreen 暗海洋绿
,#32CD32 LimeGreen 闪光深绿
,#00FF00 Lime 闪光绿
,#228B22 ForestGreen 森林绿
,#008000 Green 纯绿
,#006400 DarkGreen 暗绿色
,#7FFF00 Chartreuse 黄绿色/查特酒绿
,#7CFC00 LawnGreen 草绿色/草坪绿
,#ADFF2F GreenYellow 绿黄色
,#556B2F DarkOliveGreen 暗橄榄绿
,#9ACD32 YellowGreen 黄绿色
,#6B8E23 OliveDrab 橄榄褐色
,#F5F5DC Beige 米色/灰棕色
,#FAFAD2 LightGoldenrodYellow 亮菊黄
,#FFFFF0 Ivory 象牙色
,#FFFFE0 LightYellow 浅黄色
,#FFFF00 Yellow 纯黄
,#808000 Olive 橄榄
,#BDB76B DarkKhaki 暗黄褐色/深卡叽布
,#FFFACD LemonChiffon 柠檬绸
,#EEE8AA PaleGoldenrod 灰菊黄/苍麒麟色
,#F0E68C Khaki 黄褐色/卡叽布
,#FFD700 Gold 金色
,#FFF8DC Cornsilk 玉米丝色
,#DAA520 Goldenrod 金菊黄
,#B8860B DarkGoldenrod 暗金菊黄
,#FFFAF0 FloralWhite 花的白色
,#FDF5E6 OldLace 老花色/旧蕾丝
,#F5DEB3 Wheat 浅黄色/小麦色
,#FFE4B5 Moccasin 鹿皮色/鹿皮靴
,#FFA500 Orange 橙色
,#FFEFD5 PapayaWhip 番木色/番木瓜
,#FFEBCD BlanchedAlmond 白杏色
,#FFDEAD NavajoWhite 纳瓦白/土著白
,#FAEBD7 AntiqueWhite 古董白
,#D2B48C Tan 茶色
,#DEB887 BurlyWood 硬木色
,#FFE4C4 Bisque 陶坯黄
,#FF8C00 DarkOrange 深橙色
,#FAF0E6 Linen 亚麻布
,#CD853F Peru 秘鲁色
,#FFDAB9 PeachPuff 桃肉色
,#F4A460 SandyBrown 沙棕色
,#D2691E Chocolate 巧克力色
,#8B4513 SaddleBrown 重褐色/马鞍棕色
,#FFF5EE Seashell 海贝壳
,#A0522D Sienna 黄土赭色
,#FFA07A LightSalmon 浅鲑鱼肉色
,#FF7F50 Coral 珊瑚
,#FF4500 OrangeRed 橙红色
,#E9967A DarkSalmon 深鲜肉/鲑鱼色
,#FF6347 Tomato 番茄红
,#FFE4E1 MistyRose 浅玫瑰色/薄雾玫瑰
,#FA8072 Salmon 鲜肉/鲑鱼色
,#FFFAFA Snow 雪白色
,#F08080 LightCoral 淡珊瑚色
,#BC8F8F RosyBrown 玫瑰棕色
,#CD5C5C IndianRed 印度红
,#FF0000 Red 纯红
,#A52A2A Brown 棕色
,#B22222 FireBrick 火砖色/耐火砖
,#8B0000 DarkRed 深红色
,#800000 Maroon 栗色
,#FFFFFF White 纯白
,#F5F5F5 WhiteSmoke 白烟
,#DCDCDC Gainsboro 淡灰色
,#D3D3D3 LightGrey 浅灰色
,#C0C0C0 Silver 银灰色
,#A9A9A9 DarkGray 深灰色
,#808080 Gray 灰色
,#696969 DimGray 暗淡灰
,#000000 Black 纯黑'''
*祝福语文件如下:*
万事如意
恭喜发财
财源滚滚
一帆风顺
岁岁平安
财运亨通
五福临门
福星高照
一帆风顺
二龙腾飞
三羊开泰
四季平安
五福临门
六六大顺
七星高照
八方来财
九九同心
十全十美
龙马精神
神采奕奕
一帆风顺
顺理成章
章月句星
星罗棋布
步步高升
升官发财
财源广进
近水楼台
泰然自若
一代英豪
九州生色
八方捷报,
一帆风顺,
二龙腾飞,
三羊开泰
,四季平安,
五福临门,
七星高照,
八方来财,
万事胜意,
合家幸福,
民族崛起,
彪炳千秋
泰然自若
九如之颂
星罗棋布
步步高升
升官发财
财源广进
近水楼台
海屋添寿
日月长明
升官发财
海屋添寿
运行效果展示
运行效果

通过time.sleep()设置时间间隔,窗口会按设定频率依次弹出,图片展示了最终运行结果。若要停止所有弹窗,只需终止程序即可。
结语
结语
艾萨克·牛顿曾说:“我之所以站得高,是因为我站在巨人的肩膀上。”本程序正是在他人简单的弹窗代码基础上,经过逐步借鉴与改进才得以实现。尽管对许多开发者而言这只是一个基础功能,但我仍花费了大量时间查阅代码并调试,最终达成目标,感到十分欣慰。希望未来能继续精进技术。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









