Что здесь происходит, вы перезаписываете v каждой строкой. Вместо этого подумайте о том, чтобы написать многострочную строку, а затем установить это окончательное значение на v
.
При этом есть несколько других опций, которые вы можете попробовать. Например, вы можете использовать текстовое поле, а затем просто insert()
в конце новой строки, и это будет работать. Или еще лучше, когда вы работаете с наборами данных, вы, вероятно, захотите использовать Treeview для организации ваших данных.
Попробуйте это и дайте мне знать, если у вас есть какие-либо вопросы:
Замените это:
v.set('+----+-----------------------------+--------------------+-----------------------------+-----------------------------+')
v.set('|ID'.ljust(5) + '| Nome'.ljust(30) + '| Data de Nascimento |'.ljust(21) + ' Nome da Mãe'.ljust(29) + '| Nome do Pai'.ljust(30) + '|')
v.set('+----+-----------------------------+--------------------+-----------------------------+------ -----------------------+')
for r in rows:
v.set(f'|{r[0]}'.ljust(5) + f'| {r[1]}'.ljust(30) + f'| {r[2]}'.ljust(21) + f'| {r[3]}'.ljust(30) + f'| {r[4]}'.ljust(30) + '|')
v.set('+----+-----------------------------+--------------------+-----------------------------+------ -----------------------+')
При этом:
separator = '+----+-----------------------------+--------------------+-----------------------------+-----------------------------+'
prep_string = ''''''
prep_string = '{}{}\n'.format(prep_string, separator)
prep_string = '{}{}\n'.format('|ID'.ljust(5) + '| Nome'.ljust(30) + '| Data de Nascimento |'.ljust(21) + ' Nome da Mãe'.ljust(29) + '| Nome do Pai'.ljust(30) + '|')
prep_string = '{}{}\n'.format(prep_string, separator)
for r in rows:
prep_string = '{}{}\n'.format(f'|{r[0]}'.ljust(5) + f'| {r[1]}'.ljust(30) + f'| {r[2]}'.ljust(21) + f'| {r[3]}'.ljust(30) + f'| {r[4]}'.ljust(30) + '|')
prep_string = '{}{}\n'.format(prep_string, separator)
v.set(prep_string)
Если мы напечатаем значение prep_string
, мы получим полный набор всего, что вы пытались добавить сразу. Обратите внимание, ниже я просто заключил ваши переменные в одну строку, чтобы показать, как это будет работать. Ваши значения должны представлять любые ваши данные.
+----+-----------------------------+--------------------+-----------------------------+-----------------------------+
|ID'.ljust(5) + '| Nome'.ljust(30) + '| Data de Nascimento |'.ljust(21) + ' Nome da Mãe'.ljust(29) + '| Nome do Pai'.ljust(30) + '|
+----+-----------------------------+--------------------+-----------------------------+-----------------------------+
|ID'.ljust(5) + '| Nome'.ljust(30) + '| Data de Nascimento |'.ljust(21) + ' Nome da Mãe'.ljust(29) + '| Nome do Pai'.ljust(30) + '|
|ID'.ljust(5) + '| Nome'.ljust(30) + '| Data de Nascimento |'.ljust(21) + ' Nome da Mãe'.ljust(29) + '| Nome do Pai'.ljust(30) + '|
|ID'.ljust(5) + '| Nome'.ljust(30) + '| Data de Nascimento |'.ljust(21) + ' Nome da Mãe'.ljust(29) + '| Nome do Pai'.ljust(30) + '|
+----+-----------------------------+--------------------+-----------------------------+-----------------------------+
Для версии текстового виджета попробуйте что-то вроде этого:
import tkinter as tk
separator = '+----+-----------------------------+--------------------+-----------------------------+-----------------------------+'
root = tk.Tk()
text = tk.Text(root, wrap='none', font='TkFixedFont', width=130)
text.pack()
text.insert('end', separator + '\n')
text.insert('end', '''|ID'.ljust(5) + '| Nome'.ljust(30) + '| Data de Nascimento |'.ljust(21) + ' Nome da Mãe'.ljust(29) + '| Nome do Pai'.ljust(30) + '|''' + '\n')
text.insert('end', separator + '\n')
for r in range(3):
text.insert('end', '''|ID'.ljust(5) + '| Nome'.ljust(30) + '| Data de Nascimento |'.ljust(21) + ' Nome da Mãe'.ljust(29) + '| Nome do Pai'.ljust(30) + '|''' + '\n')
text.insert('end', separator + '\n')
root.mainloop()
Результаты: