Python 户外俱乐部·登顶纪念证书生成器_登顶纪念证书app(2)

最后

🍅 硬核资料:关注即可领取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行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值