今天为大部分学校解决麻烦:奖状生成,那么如何生成多张不同奖状呢
还是一样,我们用tkinter但是,要加上re和 PIL中的Image, ImageDraw, ImageFont
先导入库
#导入库中大部分功能
import re
from tkinter import *
from PIL import Image, ImageDraw, ImageFont
# 导入随机库
import random
将输入窗口生成
# 实例窗口
root = Tk()
root.title('奖状生成器')
root.geometry('600x400+50+50')
root.resizable(0, 0)
接下来,我们要生成三个列表:
names:获奖人姓名库
have_name:本次输入中已添加的姓名
take_name:本次输入中成功添加的姓名
names = []
have_name=[]
take_name=[]
接下来创建输入框:
#姓名输入
L1 = Label(root, text='请输入获奖人姓名:', font=('黑体', 20))
L1.place(x=10, y=40)
entry = Entry(root, font=('黑体', 20), fg='pink')
entry.place(x=260, y=40)
我们要在这里创建一个全局变量p
作为获奖人数统计
p=0
然后是:人数,添加,已添加的显示
text = StringVar()
text1 = StringVar()
text2 = StringVar()
text.set('请以中文逗号隔开')
L2 = Label(root, textvariable=text, font=('黑体', 20))
L2.place(x=300, y=200, anchor=CENTER)
L3 = Label(root, textvariable=text1, font=('黑体', 20))
L3.place(x=300, y=250, anchor=CENTER)
L4 = Label(root, textvariable=text2, font=('黑体', 20))
L4.place(x=300, y=150, anchor=CENTER)
text2.set(f'获奖人数:{p}')
下来就是最难的一部分:
姓名判定
#姓名判定
def name():
global p
text.set(' ')
text1.set(' ')
先把p全局变量
然后将已添加,添加的部分清空防止串
a = entry.get()
b = re.split(',',a)
将输入框的名字以中文逗号为分割点一个一个加入列表
遍历输入的名字:
for q in b:
if q in names:
have_name.append(q)
o = (','.join(have_name))
text.set(f'{o}已经加入名单..')
如果输入的名字在获奖人名单中:
会加入到已添加列表中并以中文逗号分隔显示:
![]()
elif a != '':
names.append(q)
take_name.append(q)
n = (','.join(take_name))
p=p+1
text1.set(f'{n}添加成功')
text2.set(f'获奖人数:{p}人')
保证输入框不是空的而且未添加,就把它添加到获奖人名单和成功添加列表中
并显示出来:
![]()
else:
text.set('你还没输入获奖者姓名!!!')
最后只剩下空白了,如果没有输入:就会显示
![]()
最后将已添加的姓名和成功添加的姓名列表清空,防止出现明明没输入却添加成功显示出来了
have_name.clear()
take_name.clear()
下来就是对奖状的更改了:
比如这张

名字设置为:学习证书(.png)
括号内为后缀名
然后生成奖状并保存:
def make_1():
for i in names:
img = Image.open('学习证书.png')
draw = ImageDraw.Draw(img)
font = ImageFont.truetype('FZCQJW.TTF', 35)
draw.text((200, 230), i, fill='black', font=font)
img.save(f'{i}'+'.png')
text.set('生成完毕,请自行打开。')
对了

这个部分为名字坐标,不同奖状自行调整
下来进行按钮的设置(最简单的别告诉我你不会):
B1 = Button(root, text='加入名单', font=('黑体', 20),command=name)
B1.place(x=150, y=320)
B2 = Button(root, text='生成奖状', font=('黑体', 20),command=make_1)
B2.place(x=300, y=320)
root.mainloop()
然后就完成了。。。
就这么简单
本文介绍如何使用Python结合tkinter、re和PIL库来批量生成不同名称的奖状。通过创建输入框收集获奖人姓名,判断并添加到奖状生成列表,动态更新显示已添加的姓名。在奖状设计中,设置好文字坐标后,即可保存个性化奖状。通过简单的按钮操作,实现奖状的批量定制。
1143

被折叠的 条评论
为什么被折叠?



