Красивый формат, идеально подходящий для терминала, «Сломан» в выводе PySimpleGUI

#python #pysimplegui #python-beautifultable

Вопрос:

Выход PySimpleGUI - ПЛОХОЙКлеммный выход - ХОРОШИЙУ меня есть таблица, которую я идеально отформатировал при распечатке на терминале. Я использую 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()