imprimir o recibo em impressora térmica python

Sep 05 2020

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

1 CoolCloud Sep 05 2020 at 10:34

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