【问题标题】:BeautifulTable Format Perfect in Terminal, "Broken" in PySimpleGUI OutputBeautifulTable 格式在终端中完美,在 PySimpleGUI 输出中“损坏”
【发布时间】:2021-11-21 18:27:18
【问题描述】:

我有一张表格,当我在终端上打印出来时,我已经完美地格式化了它。我使用 Python 的 BeautifulTable 来格式化表格,并使用 PySimpleGUI 创建多行输出窗口。我希望将表格打印到 GUI 窗口以向用户反馈。我进行了广泛的 Google 搜索,在 Stack Overflow 上搜索,官方产品文档等。我在表格上设置了一个足够大的最大宽度,我将静态列宽设置为 25,将最大表格宽度设置为 200。但是如果列超过最大宽度(无论如何根据文档),表格将自动扩展最大宽度。我在多行输出窗口中打印了超过表格宽度的长行,以确保它不是 PySimpleGUI 输出窗口的限制。上面是它如何在终端与 PySimpleGUI 中打印的示例。不知道下一步该去哪里找出问题所在......

【问题讨论】:

  • 使用等宽字体
  • 好的,我试试,谢谢!
  • 嘘!当解决方案快速而简单时,我喜欢它!切换到“快递”,一切都很好。谢谢!
  • 嗯.....必须在食谱中添加一些关于等宽字体的内容。这是编程中的那些“经典问题”之一。我将添加到“打印”部分,因为这是您创建它时所做的。

标签: python pysimplegui python-beautifultable


【解决方案1】:

要使文本垂直对齐,您需要使用mono-spaced font

我倾向于使用 Courier,因为它是一种普遍可用的字体。

现在建议使用 Multiline 元素而不是 Output 元素,因为它有很多可用的选项,而且很难使用。

这个程序将向您展示使用一个与不使用一个的效果。

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()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-16
    • 1970-01-01
    相关资源
    最近更新 更多