Как распечатать элементы из окна tkinter во внешний файл?

#python #tkinter

Вопрос:

Я пытаюсь перенести содержимое окна во внешний файл, но когда я это делаю, в нем отображается неполное количество элементов. Как мне сделать так, чтобы rec_content показывал все?

Код:

  get_content = listbox2.get(0, END) # Get the items selected by user
            bb = Label(receipt_window, text="Bert's Burgers")
            line1 = Label(receipt_window, text='----------------------------------------------------------------')
            bb.pack()
            line1.pack()
            for con_item in get_content: # Split the item into two variables to format text
                con1, con2 = con_item.split('PHP')
                rec_content = f'{con1:<30}costs PHP{con2:<8}'
                receipt = Label(receipt_window, text=rec_content)
                receipt.pack()

 item_list = [str(rec_content), "Cost"   str(cost), "Cash Paid"   payment.get(), "Change"   str(change_formula)] 
                    with open("receipt.txt", "w") as f:
                        for line in item_list:
                            f.write(line)
                            f.write("n")
 

Содержимое окна:
содержимое окна

Результат: Результат

желаемый результат: введите описание изображения здесь

Комментарии:

1. Вы используете python 2 или 3?

2. Я использую python 3

Ответ №1:

Очень простой и удобный способ форматирования текста-использовать строку с тройными кавычками.

Это позволяет вам быстро организовать или изменить вашу квитанцию.

Вот демонстрация.

 con1 = 1
con2 = 130
con3 = 2
con4 = 100
con5 = 3
con6 = 75

cost = con2   con4   con6
payment = 310
change = payment - cost

receipt = f"""
                       Bert's Burgers
        {con1} pc(s) Vegan Burger     costs PHP {con2}
        {con3} pc(s) Big Fries        costs PHP {con4}
        {con5} pc(s) French Fries     costs PHP {con6}
----------------------------------------------------------------
                     Total Cost: PHP {cost}
                  Cash Tendered: PHP {payment}
                         Change: PHP {change}
"""

with open("receipt.txt", "wt") as f:
    f.write(receipt)

with open("receipt.txt", "rt") as f:
    receipt = f.read()

print(receipt)
 

Ответ №2:

У вас та же проблема, что и в вашем последнем вопросе: вы использовали ту же переменную rec_content в цикле for, затем добавьте эту переменную за item_list пределы цикла for. Так item_list будет и с последним элементом в цикле for.

Вам нужно добавить rec_content в item_list в цикл для:

     item_list = []
    for con_item in get_content:
        con1, con2 = con_item.split('PHP')
        rec_content = f'{con1:<30}costs PHP{con2:<8}'
        receipt = Label(receipt_window, text=rec_content)
        receipt.pack()
        item_list.append(rec_content)

    item_list  = [f'Cost {cost}',
                  f'Cash Paid {payment.get()}',
                  f'Change {change_formula}']

    with open('receipt.txt', 'w') as f:
        f.write('n'.join(item_list))