import tkinter as tk from PIL import Image, ImageDraw, ImageFont from niimprint import BluetoothTransport, PrinterClient, prepare_print class LabelMaker: def __init__(self, root, model): self.root = root self.root.title("Label Maker") self.model = model self.transport = BluetoothTransport("94:11:02:66:16:4D") self.printer = PrinterClient(self.transport) self.label_text = tk.StringVar() self.label_text.set("Type your label here") self.create_widgets() def print(self, density, rotate, image): image, density = prepare_print(self.model, Image.open(image), density, rotate) self.printer.print_image(image, density=density, model=self.model) def create_widgets(self): # Text Entry label_entry = tk.Entry(self.root, textvariable=self.label_text, width=40) label_entry.pack(pady=10) # Button to create label create_button = tk.Button( self.root, text="Create Label", command=self.create_label ) create_button.pack(pady=10) def create_label(self): label_text = self.label_text.get() # Create image image = Image.new("RGB", (319, 95), "white") draw = ImageDraw.Draw(image) # Set font (change the font path according to your system) font_path = "/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf" font_size = 20 font = ImageFont.truetype(font_path, font_size) # Calculate text position box = font.getbbox(label_text) # getbbox returns (left, top, right, bottom) font_width = box[2] - box[0] font_height = box[3] - box[1] x = (image.width - font_width) // 2 y = (image.height - font_height) // 2 # Draw text on image draw.text((x - box[0], y - box[1]), label_text, font=font, fill="black") # Save image or send it to the printer image.save("label.png") self.print(1, 90, "label.png") print("Label created and saved as label.png") if __name__ == "__main__": root = tk.Tk() label_maker = LabelMaker(root, "d110") root.mainloop()