#python #pysimplegui #python-beautifultable
Вопрос:
У меня есть таблица, которую я идеально отформатировал при распечатке на терминале. Я использую BeautifulTable Python для форматирования таблицы и PySimpleGUI для создания многострочного окна вывода. Я бы хотел, чтобы таблица была распечатана в окне графического интерфейса для обратной связи с пользователем. Я провел обширные поиски в Google, поиск здесь по переполнению стека, официальной документации по продукту и т. Д. Я установил максимальную ширину таблицы, которая достаточно велика, я установил статическую ширину столбцов на 25, а максимальную ширину таблицы на 200. Но таблица автоматически расширится до максимальной ширины, если столбцы превысят ее (в любом случае, согласно документации). Я напечатал длинные строки в многострочном окне вывода, которые превышают ширину таблицы, чтобы убедиться, что это не является ограничением окна вывода PySimpleGUI. Выше приведен пример того, как он печатается в терминале по сравнению с Писимплеги. Понятия не имею, куда идти дальше, чтобы выяснить, в чем проблема …
Комментарии:
1. используйте моноширинный шрифт
2. Хорошо, я попробую, спасибо!
3. Ура! Мне нравится, когда решения быстрые и простые! Переключился на «Курьера» , и все в порядке. Спасибо!
4. Хммм….. придется добавить что-нибудь в поваренную книгу о моноширинных шрифтах. Это одна из тех «классических проблем» в программировании. Я добавлю в раздел «печать», так как именно это вы делаете для его создания.
Ответ №1:
Чтобы выровнять текст по вертикали, вам нужно будет использовать шрифт с одним интервалом.
Я предпочитаю использовать Courier, так как это универсальный шрифт.
Многострочный элемент теперь предлагается использовать вместо элемента вывода, так как у него гораздо больше доступных опций и его очень сложно использовать.
Эта программа покажет вам эффект от использования одного из них по сравнению с его отсутствием.
import PySimpleGUI as sg
import random
import string
text_data = [[''.join([random.choice(string.ascii_letters) for _ in range(10)]) for _ in range(4)] for rows in range(10)]
layout = [ [sg.Text('Outputting Text that is tabular in nature')],
[sg.Multiline(size=(60,20), reroute_stdout=True, font='default 10', write_only=True, key='-MLINE-')],
[sg.Button('Print Table'),sg.Button('Courier'), sg.Button('Exit')] ]
window = sg.Window('Window Title', layout)
while True:
event, values = window.read()
# print(event, values)
if event == sg.WIN_CLOSED or event == 'Exit':
break
if event == 'Print Table':
for row in text_data:
print(' '.join(row))
elif event == 'Courier':
window['-MLINE-'].update(font='courier 10')
window.close()