imprimir o recibo em impressora térmica python
Estou criando um sistema de inventário em python.i preciso suavizar a receita de impressão depois que todas as vendas foram concluídas.quando clico no botão Salvar, tenho usando o banco de dados mysql. ela possui tabelas de vendas e produtos de vendas. As tabelas de vendas consistem nas seguintes colunas - id, subtotal, pagamento, saldo. As tabelas sales_products consistem nas seguintes colunas –id, sales_id, item, qty, preço, total necessidade de salvar os dados em duas tabelas diferentes quando eu pressiono o botão Salvar ao mesmo tempo que o print recipt deve ser exibido. Eu não sei como salvar os dados em tabelas multipule eu não sei como salvar todo o treeview salvo no banco de dados. eu tenho a id da lastinsert abaixo na função de salvar.
from tkinter import ttk
from tkinter import *
from tkinter import messagebox
import mysql.connector
def save():
totall = float(tot.cget("text"))
pay = float(e11.get())
bal = pay - totall
mysqldb = mysql.connector.connect(host="localhost", user="root", password="", database="milkshop")
mycursor = mysqldb.cursor()
try:
sql = "INSERT INTO sales (id,subtotal,pay,balance) VALUES (%s, %s, %s, %s)"
val = ("", totall, pay, bal)
mycursor.execute(sql, val)
mysqldb.commit()
lastid = mycursor.lastrowid
except Exception as e:
print(e)
mysqldb.rollback()
mysqldb.close()
def pay():
totall = float(tot.cget("text"))
pay = float(e11.get())
bal = pay - totall
balText.set(bal)
root = Tk()
root.title("Inventory System using Python")
root.geometry("1000x600")
global e1
global e2
global e3
global e4
global totText
global balText
totText = StringVar()
balText = IntVar()
Label(root, text="Inventory System using Python", font="arial 22 bold").place(x=5, y=10)
var1 = IntVar()
Checkbutton(root, text="Thai Fried Rice", variable=var1).place(x=10, y=50)
var2 = IntVar()
Checkbutton(root, text="Basil Fried Rice", variable=var2).place(x=10, y=80)
var3 = IntVar()
Checkbutton(root, text="Pineapple Fried Rice", variable=var3).place(x=10, y=110)
var4 = IntVar()
Checkbutton(root, text="Crab Fried Rice", variable=var4).place(x=10, y=140)
var5 = IntVar()
Checkbutton(root, text=" Fish Fried Rice ", variable=var5).place(x=10, y=170)
Label(root, text="Total").place(x=600, y=10)
Label(root, text="Pay").place(x=600, y=50)
Label(root, text="Balance").place(x=600, y=80)
e8 = Entry(root)
e8.place(x=300, y=110)
e9 = Entry(root)
e9.place(x=300, y=140)
e10 = Entry(root)
e10.place(x=300, y=170)
tot = Label(root, text="", font="arial 22 bold", textvariable=totText)
tot.place(x=650, y=10)
e11 = Entry(root)
e11.place(x=650, y=50)
e12 = Entry(root)
balance = Label(root, text="", font="arial 22 bold", textvariable=balText).place(x=650, y=80)
Button(root, text="Add", command=show, height=3, width=13).place(x=10, y=220)
Button(root, text="PayNow", command=pay, height=3, width=13).place(x=650, y=120)
Button(root, text="Save", command=save, height=3, width=13).place(x=750, y=120)
cols = ('item', 'price', 'qty', 'total')
listBox = ttk.Treeview(root, columns=cols, show='headings')
for col in cols:
listBox.heading(col, text=col)
listBox.grid(row=1, column=0, columnspan=2)
listBox.place(x=10, y=300)
root.mainloop()
Respostas
Aqui está como eu acho que você deve proceder com o recibo.
from tkinter import *
root = Tk()
def reciept():
top = Toplevel()
price1 = 3000
qty1 = 3
total1 = price1*qty1
price2 = 5000
qty2 = 4
total2 = price1*qty2
l = Label(top,text='---------RECIEPT----------')
l.pack()
heading = Label(top,text='PRICE\tQTY\tTOTAL')
heading.pack()
item1 = Label(top,text=f'{price1}\t{qty1}\t{total1}')
item1.pack()
item2 = Label(top,text=f'{price2}\t{qty2}\t{total2}')
item2.pack()
b = Button(root,text='Print reciept',command=reciept)
b.pack(padx=10,pady=10)
root.mainloop()
O \tadicionará 4 espaços ao final da carta.
Você pode substituir os preços por seus e1.get()e por todos.
Você também pode usar grid()aqui, mas pode ser complicado e requer mais linhas.
Veja aqui como imprimir usando python
Espero que você tenha uma ideia.
Felicidades