列表框Python列

时间:2017-02-11 00:47:35

标签: python-2.7 tkinter listbox

我正在尝试开发一个脚本,允许我在列表框中保留格式。

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格式:

enter image description here

问题:我如何让我的列表像我用过的图片那样出现?

我注意到树形图似乎对水平框有一些限制并且在不调整整个GUI的情况下扩展列,所以我决定这可能是一种更适合我需要的变换方式细

1 个答案:

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

这似乎与您使用制表符输出的输出相匹配:

enter image description here
另一种选择可能是使用Grid布局。