分享免费的编程资源和教程

网站首页 > 技术教程 正文

如何用Python 打造属于自己的图形化签名界面

goqiw 2025-05-21 13:43:02 技术教程 4 ℃ 0 评论

今天,想弄一个签名的界面,弄个简单的供参考学习使用,一个窗口界面里面弄个输入框,方便输入名字啥的,一个生成按钮,一个生成画布的区域,再设置一个保存生成的签名按钮。

从简单入手,复杂的一下也弄不完,也没那么多精力,以小见大,高山也是一块一块石头叠起来的。

界面大致如下


由于没有啥特殊的字体,也不想花太多时间去研究下载字体,就先这样了,你学会了自己去搞点漂亮的艺术字体就可以了。


生成后保存起来。

我们还是上代码吧,想学好就自己练习,自己修改。

import tkinter as tk

from tkinter import font, filedialog

from PIL import Image, ImageDraw, ImageFont, ImageTk

class SignatureGenerator:

def __init__(self, root):

self.root = root

self.root.title("一个简单的艺术签名生成器")


# 初始化参数

self.name = tk.StringVar() # 输入的名字

# self.font_name = "arial.ttf" # 默认字体(可替换为其他字体文件)

#self.font_name ="simhei.ttf"#黑体 艺术字体可以去下载到电脑上,然后使用

self.font_name ="msyhbd.ttc"#雅黑

self.font_size = 60

self.text_color = "blue" #设置字体颜色

self.bg_color = "white"#你想改什么颜色就改什么颜色

# 创建界面

self.create_widgets()

def create_widgets(self):

"""创建界面组件"""

# 输入框和按钮

input_frame = tk.Frame(self.root)

input_frame.pack(pady=20)

tk.Label(input_frame, text="输入姓名:").pack(side=tk.LEFT)

entry = tk.Entry(input_frame, textvariable=self.name, width=20)

entry.pack(side=tk.LEFT, padx=5)

generate_btn = tk.Button(

input_frame, text="生成签名",

command=self.generate_signature

)

generate_btn.pack(side=tk.LEFT, padx=5)


save_btn = tk.Button(

input_frame, text="保存图片",

command=self.save_image

)

save_btn.pack(side=tk.LEFT)


# 签名预览区域

self.preview_label = tk.Label(self.root)

self.preview_label.pack(pady=20)

def generate_signature(self):

"""生成艺术签名图片"""

name = self.name.get().strip()

if not name:

return


# 创建空白图片

image = Image.new("RGB", (800, 200), self.bg_color)

draw = ImageDraw.Draw(image)


try:

# 加载字体(使用系统字体或自定义字体文件)

font = ImageFont.truetype(self.font_name, self.font_size)

except IOError:

font = ImageFont.load_default()


# 计算文本位置(使用新版 textbbox 方法)

bbox = draw.textbbox((0, 0), name, font=font)

text_width = bbox[2] - bbox[0] # 右边界 - 左边界 = 宽度

text_height = bbox[3] - bbox[1] # 下边界 - 上边界 = 高度

x = (image.width - text_width) / 2

y = (image.height - text_height) / 2


# 绘制文字

draw.text((x, y), name, fill=self.text_color, font=font)


# 显示预览

self.current_image = image

photo = ImageTk.PhotoImage(image)

self.preview_label.config(image=photo)

self.preview_label.image = photo

def save_image(self):

"""保存图片到本地"""

if not hasattr(self, "current_image"):

return


file_path = filedialog.asksaveasfilename(

defaultextension=".png",

filetypes=[("PNG 图片", "*.png"), ("所有文件", "*.*")]

)

if file_path:

self.current_image.save(file_path)

if __name__ == "__main__":

root = tk.Tk()

app = SignatureGenerator(root)

root.mainloop()

附上代码截图,



以真诚交换真诚,奉献给努力刻苦勤奋的人。我一直在努力。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表