如何让tabulate包在PySimpleGUI中正常显示?输出对齐异常
解决PySimpleGUI中tabulate文本表格对齐问题
问题核心:tabulate生成的文本表格依赖等宽字体才能保证列对齐,但PySimpleGUI默认的Text/Multiline元素用的是比例字体,导致显示混乱。复制到其他地方正常是因为目标环境用了等宽字体。
解决方案
把Text元素替换为Multiline元素,并指定等宽字体,同时禁用编辑功能:
修改后的完整代码
import PySimpleGUI as sg from tabulate import tabulate def txt_out(txt): window["-txtUt-"].update(txt) def se_bevegelser(): headings = ["Innskudd/uttak", "Beløp i kr"] data = [["Innskudd", 4000], ["Uttak", 3000], ["Innskudd", 10000]] my_table = tabulate(data, headings) txt_out(my_table) print(my_table) # 设置全局默认字体为等宽字体,也可单独给Multiline设置 sg.set_options(font=("Consolas", 12)) # Windows用Consolas,macOS用Monaco,Linux用DejaVu Sans Mono layout = [[sg.Button("Se siste bevegelser", key='-btnSeBevegelser-')], # 替换Text为Multiline,禁用编辑并设置合适大小 [sg.Multiline("", size=(40,5), key="-txtUt-", disabled=True, autoscroll=False)], [sg.Button("Avslutt")] ] window = sg.Window("Min Minibank", layout) while True: event, values = window.read() if event in (sg.WIN_CLOSED, "Avslutt"): break elif event == "-btnSeBevegelser-": se_bevegelser() window.close()
关键说明
- 等宽字体选择:Windows系统优先用
Consolas,macOS用Monaco,Linux用DejaVu Sans Mono或Ubuntu Mono,这些都是系统自带的等宽字体 - Multiline的
disabled=True确保用户无法编辑内容,仅作为显示容器 - 如果不想全局修改字体,可单独给Multiline元素指定
font参数,比如sg.Multiline(..., font=("Consolas", 12))
内容的提问来源于stack exchange,提问作者joearmstrong
相关产品推荐
相关产品推荐

