问题描述
我正在使用 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 (将#修改为@)