最后
🍅 硬核资料:关注即可领取PPT模板、简历模板、行业经典书籍PDF。
🍅 技术互助:技术群大佬指点迷津,你的问题可能不是问题,求资源在群里喊一声。
🍅 面试题库:由技术群里的小伙伴们共同投稿,热乎的大厂面试真题,持续更新中。
🍅 知识体系:含编程语言、算法、大数据生态圈组件(Mysql、Hive、Spark、Flink)、数据仓库、Python、前端等等。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
每个周末,我喜欢和户外俱乐部的小伙伴们一起到野外登山徒步,一晃有七、八个年头了。前些天受天行健户外聚乐部群主的委托,要给一批驴友用photoshop制作登顶纪念证书(图片),就是拿来给完成登顶的驴友们发发微信朋友圈的图片,同时顺带也给俱乐部做了广告。于是乎,我索性用python做了个小软件,这样用软件生成多省事,不用每次活动都要花时间PS了。
软件界面
源代码
certific.pyw
import pyautogui as pg
import datetime as dt
import tkinter as tk
import tkinter.font as tkFont
from PIL import Image,ImageTk,ImageGrab
def winOpen(W,H):
X,Y = pg.size()
X0 = (X-W)//2
Y0 = (Y-H)//2
winSize = str(W)+'x'+str(H)
winPos = winSize+'+'+str(X0)+'+'+str(Y0)
win.geometry(winPos)
win.resizable(False,False)
win.wm_attributes('-topmost',True)
wTitle = u'登顶纪念证书生成器'
win.title(wTitle)
initWidget()
fillText()
win.update()
def initWidget():
global canvas,bgImg,et
canvas = tk.Canvas(win,width=600,height=800,bg='white')
canvas.place(x=0,y=0)
image = Image.open('certific.png')
bgImg = ImageTk.PhotoImage(image)
canvas.create_image(300,400,image = bgImg)
lbText=['线路:','证书:','姓名:','高峰:','简介:','日期:']
etText=['苏州·灵树线','登顶纪念证书','青荷莲子',
'大阳山·箭阙峰','海拔:338米']
d = dt.date.today()
strDate = '{0:04}.{1:02}.{2:02}'.format(d.year,d.month,d.day)
etText.append(strDate)
xLeft,yTop,yStep=630,50,60
etWidth=243
et,lb = [],[]
for i in range(len(lbText)):
et.append(0)
et[i] = tk.Entry(win)
et[i].place(x=xLeft,y=yTop+yStep*i,width=etWidth)
et[i].insert(0,etText[i])
lb.append(0)
lb[i] = tk.Label(win, text=lbText[i],anchor='w')
lb[i].place(x=xLeft,y=yTop+yStep*i-26)
bX,bY = 650,400
bTitle = u'内容修改'
tBtn1 = tk.Button(win,text=bTitle,command=fillText)
tBtn1.place(x=bX,y=bY,width=bW,height=bH)
bX += 120
bTitle = u'生成证书'
tBtn1 = tk.Button(win,text=bTitle,command=saveImage)
tBtn1.place(x=bX,y=bY,width=bW,height=bH)
bX,bY = 650,460
bTitle = u'导入名单'
tBtn1 = tk.Button(win,text=bTitle,command=importList)
tBtn1.place(x=bX,y=bY,width=bW,height=bH)
bX += 120
bTitle = u'批量生成'
tBtn1 = tk.Button(win,text=bTitle,command=batchCertific)
tBtn1.place(x=bX,y=bY,width=bW,height=bH)
def fillText():
global et,idText
yTop = [55,110,305,490,540,725]
font = [tkFont.Font(family='微软雅黑', size=25, weight='bold'),
tkFont.Font(family='微软雅黑', size=35, weight='bold'),
tkFont.Font(family='楷体', size=26),
tkFont.Font(family='黑体', size=22),
tkFont.Font(family='宋体', size=20),
tkFont.Font(family='微软雅黑',size=18)]
color = ['#33a3d0','#33a3d0','#6d6d6d',
'#0ab193','#4cc580','#4cc580']
count = len(yTop)
try:
for i in range(count):
canvas.itemconfig(idText[i],text=et[i].get(),fill=color[i])
except:
idText = [0]*count
for i in range(count):
idText[i] = canvas.create_text(300,yTop[i],
anchor='center',font=font[i],text=et[i].get(),fill=color[i])
def grabImage(widget, filename):
widget.update()
x = win.winfo_rootx()+widget.winfo_x()+1
y = win.winfo_rooty()+widget.winfo_y()+1
w = widget.winfo_width()-4
h = widget.winfo_height()-4
box = (x, y, x+w, y+h)
ImageGrab.grab().crop(box).save(filename)
def saveImage():
global et
grabImage(canvas,et[5].get()+et[0].get()+'·'+et[2].get()+'.png')
def importList():
pass
def batchCertific():
pass
if __name__ == '__main__':
win = tk.Tk()
wW,wH = 900,800 #窗体的宽高
bW,bH = 90,40 #按钮的宽高
winOpen(wW,wH)
win.mainloop()
空白证书
certific.png,可以根据需要制作自己的“空白证书”图片:
成品证书
图片宽高: 600x800;大小约200Kb
感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的:
① 2000多本Python电子书(主流和经典的书籍应该都有了)
② Python标准库资料(最全中文版)
③ 项目源码(四五十个有趣且经典的练手项目及源码)
④ Python基础入门、爬虫、web开发、大数据分析方面的视频(适合小白学习)
⑤ Python学习路线图(告别不入流的学习)
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!