62 lines
1.9 KiB
Python
62 lines
1.9 KiB
Python
import tkinter as tk
|
|
from tkinter import simpledialog, messagebox
|
|
from PIL import Image, ImageTk
|
|
import barcode
|
|
from barcode.writer import ImageWriter
|
|
import cups
|
|
import os
|
|
|
|
def get_printers():
|
|
conn = cups.Connection()
|
|
return list(conn.getPrinters().keys())
|
|
|
|
def print_label(printer_name, text):
|
|
# Generate barcode image
|
|
CODE128 = barcode.get_barcode_class('code128')
|
|
code = CODE128(text, writer=ImageWriter())
|
|
filename = code.save('label_barcode')
|
|
|
|
# Create label image with text and barcode
|
|
barcode_img = Image.open(filename + '.png')
|
|
label_img = Image.new('RGB', (barcode_img.width, barcode_img.height + 40), 'white')
|
|
label_img.paste(barcode_img, (0, 0))
|
|
|
|
# Add text below barcode
|
|
from PIL import ImageDraw, ImageFont
|
|
draw = ImageDraw.Draw(label_img)
|
|
font = ImageFont.load_default()
|
|
w, h = draw.textsize(text, font=font)
|
|
draw.text(((barcode_img.width - w) // 2, barcode_img.height + 10), text, fill='black', font=font)
|
|
|
|
label_img.save('final_label.png')
|
|
|
|
# Print using CUPS
|
|
conn = cups.Connection()
|
|
conn.printFile(printer_name, 'final_label.png', "Label Print", {})
|
|
os.remove(filename + '.png')
|
|
os.remove('final_label.png')
|
|
|
|
def main():
|
|
root = tk.Tk()
|
|
root.withdraw()
|
|
|
|
printers = get_printers()
|
|
if not printers:
|
|
messagebox.showerror("Error", "No printers found.")
|
|
return
|
|
|
|
printer = simpledialog.askstring("Printer", f"Available printers:\n{printers}\nEnter printer name:")
|
|
if printer not in printers:
|
|
messagebox.showerror("Error", "Invalid printer selected.")
|
|
return
|
|
|
|
text = simpledialog.askstring("Label Text", "Enter text for the label:")
|
|
if not text:
|
|
messagebox.showerror("Error", "No text entered.")
|
|
return
|
|
|
|
print_label(printer, text)
|
|
messagebox.showinfo("Done", "Label sent to printer.")
|
|
|
|
if __name__ == "__main__":
|
|
main() |