如何在python中使用收据打印机打印收据

问题描述

我正在使用 tkinter用户创建收据,我想使用 thermal printer 打印它。

如何将打印机连接到 tkinter 窗口。在 tkinter 中,我使用 ScrolledText 小部件来创建收据。

主窗口代码

import tkinter as tk
import tkinter.ttk as ttk
from tkinter.scrolledtext import ScrolledText
import time

class BillWindow:
def __init__(self,customer_name,customer_contact,items,master):
    self.master = master
    self.items = items
    self.customer_name = customer_name
    self.customer_contact = customer_contact

    # Creating Top-level window & Setting Window Width and height
    self.bill_win = tk.Toplevel(master)
    win_width,win_height = 727,492
    screen_width = master.winfo_screenwidth()
    screen_height = master.winfo_screenheight()
    x = int((screen_width / 2) - (win_width / 2)) - 7
    y = int((screen_height / 2) - (win_height / 2)) - 35
    self.bill_win.geometry(f'{win_width}x{win_height}+{x}+{y}')
    self.bill_win.resizable(0,0)  # disabling resize of window
    # Forcing Top-level window to stay on Top
    self.bill_win.attributes('-topmost','true')
    # Setting Top Level Window Title
    self.bill_win.title("BILL")
    # Adding icon to title menu
    self.bill_win.iconbitmap("./bill_title.ico")

    # ============= BILL FRAME Background Body Frame ==============#

    bill_frame = ttk.Frame(self.bill_win,width=win_width,height=win_height)
    bill_frame.place(x=0,y=0)

    # Bill Title
    bill_title = ttk.Label(bill_frame,text="BILL",font="Consolas 30 bold",border=7,relief="groove",anchor='c',background='#282c34',foreground='#fff')
    bill_title.grid(row=0,ipadx=317)
    # Bill Contents/Text Area
    self.bill_text = ScrolledText(bill_frame,font="Consolas 10",width=101,height=29)
    self.bill_text.grid(row=1,sticky='W')

    # Define attributes for Bill entry
    heading = "Retail Invoice"
    cust_name = f"Customer Name    : {customer_name}"
    cust_phno = f"Customer Number  : {customer_contact}"
    # Defining date and time variables
    self.date_string = "Date : " + time.strftime("%d/%b/%Y")
    self.time_string = "Time : " + time.strftime("%I:%M:%s %p")
    # print(date_string,time_string)

    # First Deleting Entire bill Contents/Texts
    self.bill_text.delete('1.0','end')
    # Inserting to Clean bill/Texts
    self.bill_text.insert('end',"\n" + heading + "\n")
    self.bill_text.insert('end',"\n" + cust_name)
    self.bill_text.insert('end',"\t\t\t\t\t\t\t\t\t" + self.date_string + "\n")
    self.bill_text.insert('end',"\n" + cust_phno)
    self.bill_text.insert('end',"\t\t\t\t\t\t\t\t\t" + self.time_string + "\n\n")

    self.bill_text.insert('end',"-" * 100 + "\n")
    self.bill_text.insert('end',"No   Product Name\t\t\t\t\t\t   Quantity\t\t     Rate(\u20B9)\t\t     Total(\u20B9)\n")
    self.bill_text.insert('end',"-" * 100 + "\n")

    # Total Price set to 0 before calculating
    sum = 0.0
    # Inserting items to Bill and Calculating sum of all contents
    for i in range(len(items)):
        item = items[i]
        self.bill_text.insert('end',f"\n  {i + 1}  {item[0]}\t\t\t\t\t\t\t{item[1]}\t\t{item[2]}\t\t{item[3]}")
        total_col = item[3]
        total_col = float(total_col.split("\u20B9")[1])
        sum = sum + total_col
        # print(items[i])
    # Inserting sum amount at the end
    self.bill_text.insert('end',"\n\n\n\n" + "-" * 100 + "\n")
    # print(sum)
    self.total_amt = f"\u20B9 {sum}"
    self.bill_text.insert('end',f"TOTAL =  {self.total_amt}")
    self.bill_text.insert('end',"\n" + "-" * 100 + "\n")

    # Tags and styling
    self.bill_text.tag_add('heading','2.0','2.end')
    self.bill_text.tag_config('heading',font='Arial 20 bold',justify='center')
    self.bill_text.tag_add('customer','4.0','6.end')
    self.bill_text.tag_config('customer',font='Consolas 11',lmargin1=20)
    self.bill_text.tag_add('sub-head','9.0','9.end')
    self.bill_text.tag_config('sub-head',font='Consolas 12 bold',lmargin1=10)

    total_line = str(i + 17)  # Calculating total lines to style Total Amount
    # print(total_line)
    self.bill_text.tag_add('total',f'{total_line}.0',f'{total_line}.end')
    self.bill_text.tag_config('total',font='Aerial 15 bold',justify='center')

    # disabling modification of bill
    self.bill_text.config(state='disabled')

if __name__ == "__main__":
  master = tk.Tk()
  master.attributes('-topmost','true')

  items = [['Set Wet Hair Gel Cool,50ml',10,'₹ 50.5','₹ 505.0'],['Set Wet Hair Gel Cool,20,'₹ 1010.0'],['Fair & lovely Women,50g',50,'₹ 97.0','₹ 4850.0'],['Nivea Lip Balm,4.8g',140,'₹ 105.0','₹ 14700.0'],['testing',1,'₹ 1.0','₹ 10.0'],'₹ 10.0','₹ 10.0']]
  customer_name = "Testing"
  customer_contact = "999"
  win_obj = BillWindow(customer_name,master)
  master.mainloop()

我找到了这段代码,但对我来说没有帮助:

    INCH = 1440
    pDC = win32ui.CreateDC()
    pDC.CreatePrinterDC(win32print.GetDefaultPrinter())
    pDC.StartDoc("Main Slip")
    pDC.StartPage()
    pDC.SetMapMode(win32con.MM_TWIPS)
    TEXT = str("")

    pDC.DrawText(TEXT,(0,INCH * -1,INCH * 7,INCH * -5),win32con.DT_CENTER)
    pDC.EndPage()
    pDC.EndDoc()

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)