Files
Gracious f9daab05e4 Add Tkinter label designer with emoji picker
label_app.py: label size presets, multi-line text with auto-fit / bold /
alignment, tabbed emoji picker (rendered via Noto Color Emoji,
gamma-darkened and dithered for the thermal head), live 1-bit preview,
save PNG, print in a background thread. Settings persist in
~/.config/niimprint-label/.

main.py is the earlier minimal GUI it supersedes.
2026-09-21 08:02:58 +01:00

67 lines
2.1 KiB
Python

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()