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