1+ import tkinter as tk
2+ from tkinter import filedialog , messagebox
3+ from PIL import Image , ImageTk
4+ import barcode
5+ from barcode .writer import ImageWriter
6+
7+
8+ class BarcodeGeneratorApp :
9+
10+ def __init__ (self , root ):
11+
12+ self .root = root
13+
14+ self .root .title ("条形码生成器" )
15+
16+ # 输入标签和文本框
17+
18+ self .label = tk .Label (root , text = "请输入条形码数据(数字):" )
19+
20+ self .label .pack (pady = 10 )
21+
22+ self .entry = tk .Entry (root , width = 40 )
23+
24+ self .entry .pack (pady = 5 )
25+
26+ # 生成按钮
27+
28+ self .generate_button = tk .Button (root , text = "生成条形码" , command = self .generate_barcode )
29+
30+ self .generate_button .pack (pady = 10 )
31+
32+ # 用于显示条形码的标签
33+
34+ self .barcode_label = tk .Label (root )
35+
36+ self .barcode_label .pack (pady = 10 )
37+
38+ # 初始化条形码图像为None
39+
40+ self .barcode_image = None
41+
42+ def generate_barcode (self ):
43+
44+ # 从输入框获取数据
45+
46+ data = self .entry .get ()
47+
48+ # 检查数据是否为空
49+
50+ if not data :
51+ messagebox .showerror ("错误" , "请输入条形码数据!" )
52+
53+ return
54+
55+ # 尝试生成条形码
56+
57+ try :
58+
59+ # 这里我们使用ean13作为示例,但你可以根据需要更改
60+
61+ EAN = barcode .get_barcode_class ('ean13' )
62+
63+ ean = EAN (data , writer = ImageWriter ())
64+
65+ # 保存条形码到内存中的字节流
66+
67+ from io import BytesIO
68+
69+ buffer = BytesIO ()
70+
71+ ean .save (buffer , format = 'PNG' )
72+
73+ buffer .seek (0 )
74+
75+ # 将字节流转换为PIL图像
76+
77+ self .barcode_image = Image .open (buffer )
78+
79+ # 将PIL图像转换为Tkinter图像
80+
81+ tk_image = ImageTk .PhotoImage (self .barcode_image )
82+
83+ # 更新条形码标签以显示新图像
84+
85+ self .barcode_label .config (image = tk_image )
86+
87+ self .barcode_label .image = tk_image # 保持对图像的引用
88+
89+ # 可选:提供保存条形码的选项
90+
91+ # save_path = filedialog.asksaveasfilename(defaultextension=".png", filetypes=[("PNG files", "*.png")])
92+
93+ # if save_path:
94+
95+ # self.barcode_image.save(save_path)
96+
97+ # messagebox.showinfo("成功", f"条形码已保存到 {save_path}")
98+
99+
100+
101+ except barcode .writer .WriterException as e :
102+
103+ messagebox .showerror ("条形码生成失败" , f"错误: { e } " )
104+
105+ except Exception as e :
106+
107+ messagebox .showerror ("错误" , f"发生未知错误: { e } " )
108+
109+
110+ if __name__ == "__main__" :
111+ root = tk .Tk ()
112+
113+ app = BarcodeGeneratorApp (root )
114+
115+ root .mainloop ()
0 commit comments