Как выровнять или выровнять строки и столбцы при записи в файл? - PullRequest
0 голосов
/ 11 мая 2018

Мой код - приложение Tkinter для создания счета и его распечатки. При создании счета значения записываются в текстовый файл. Однако выходные данные выровнены неправильно, есть ли способ указать шаблон с фиксированными аргументами в качестве позиций для каждой строки?

Это минимальная программа:

#This is a working python script

#Declare and assign field names
vbill_SubTotal = "Sub Total:        Rs. "
vbill_TaxTotal = "Tax Total:        Rs. "
vbill_RoundOff = "Round Off:        Rs. "
vbill_GrandTotal = "Grand Total:      Rs. "

#Declare the variables and assign values
vsubTotal = 20259.59
vtaxTotal = 5097.78
vroundOff = 0.27
vgrandTotal = 25358.00

#Concatenate all values into one variable
vbill_contents = vbill_SubTotal + str(vsubTotal) + '\n' +\
vbill_TaxTotal + str(vtaxTotal)  + '\n' +\
vbill_RoundOff + str(vroundOff) + '\n'+\
vbill_GrandTotal + (str(vgrandTotal)) + '\n'

#Create a new bill
mybill = "bill.txt"
writebill = open(mybill,"w")
#Write the contents into the bill
writebill.write(vbill_contents)

Когда эта программа выполняется, вывод записывается в файл блокнота "bill.txt" в вашем относительном пути. Данные в файле следующие:

Sub Total:        Rs. 20259.59
Tax Total:        Rs. 5097.78
Round Off:        Rs. 0.27
Grand Total:      Rs. 25358.00

На первый взгляд результат выглядит аккуратно, но при ближайшем рассмотрении выравнивание не определено. Это мой желаемый результат, все десятичные дроби должны быть в одном столбце:

Sub Total:        Rs. 20259.59
Tax Total:        Rs.  5097.78
Round Off:        Rs.     0.27
Grand Total:      Rs. 25358.00

Я изучил множество учебных пособий для этого и ничего не нашел в фреймворке Tkinter. Единственный вариант, который мне нужно изучить, - это сначала записать все эти данные на холст и выровнять их, а затем распечатать сам холст, а не этот текстовый файл. Любая помощь по быстрому пути вперед? Если холст - мой единственный вариант, предоставьте образец / указатель на самый простой способ использования холста для выполнения этой работы.

1 Ответ

0 голосов
/ 14 мая 2018

На самом деле это не функция tkinter, а просто форматирование строк.

Библиотека строк Python позволяет вам определять формат для вывода строк, а также дополняет, выравнивает по левому и правому краям иподробнее.

В качестве примера

name = "Sub Total"
price = 20789.95
line_format = "{field_name: <18s}Rs. {price:>10.2f}"
print(line_format.format(field_name=name,price=price))

Будет выводить

Sub Total         Rs.   20789.95

Переменная line_format содержит «шаблон» спецификации формата.Вы указываете каждое 'поле' внутри фигурных скобок {}.

{field_name: <18s}
field_name - The name of the dictionary field to format here
' ' a space - Pad with spaces - this is the default
< - Left align - this is default too
18 - Pad the field to fill 18 characters
s - input is a string

{price:>10.2f}
price - the name of the dictionary field to format here
> - Right Align
10 - Pad to ten characters
2 - 2 decimal places
f - input is a floating point number

После того, как вы отформатировали строку, вы можете записать ее на свой холст или в любое другое место, где хотите, чтобы она отображалась.

...