我正在尝试开发一个脚本,允许我在列表框中保留格式。
from Tkinter import *
from tabulate import tabulate
master = Tk()
listbox = Listbox(master)
listbox.pack()
table = [["spam",42],["eggs",451],["bacon",0]]
headers = ["item", "qty"]
tb = tabulate(table, headers, tablefmt="plain")
listbox.insert(END,tb)
mainloop()
结果结果列表框填充了tb格式:
问题:我如何让我的列表像我用过的图片那样出现?
我注意到树形图似乎对水平框有一些限制并且在不调整整个GUI的情况下扩展列,所以我决定这可能是一种更适合我需要的变换方式细
答案 0 :(得分:1)
一个选项可能是使用str.format()将每个插入对齐到列表框中:
from Tkinter import *
import tkFont
master = Tk()
master.resizable(width=False, height=False)
master.geometry('{width}x{height}'.format(width=300, height=100))
my_font = tkFont.Font(family="Monaco", size=12) # use a fixed width font so columns align
listbox = Listbox(master, width=400, height=400, font=my_font)
listbox.pack()
table = [["spam", 42, "test", ""],["eggs", 451, "", "we"],["bacon", "True", "", ""]]
headers = ["item", "qty", "sd", "again"]
row_format ="{:<8} {:>8} {:<8} {:8}" # left or right align, with an arbitrary '8' column width
listbox.insert(0, row_format.format(*headers, sp=" "*2))
for items in table:
listbox.insert(END, row_format.format(*items, sp=" "*2))
mainloop()
这似乎与您使用制表符输出的输出相匹配:
另一种选择可能是使用Grid布局。