2017-02-11 100 views
0

我想开发一个脚本,允许我保持我的格式在我的列表框中。列表框Python列

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

的问题:如何让我的列表框中出现像上面的图片中,我用TABULATE进行格式化吗?

我注意到treeview似乎有一些水平框的限制,并扩大列而不调整整个图形用户界面,所以我决定这可能是一个更适合我的需求的摇摆转换方式。

+0

对不起,我不完全按照你的目标。你有什么问题? – davedwards

+0

理想情况下,我想列表框被填充像表格将被格式化。 –

+0

这很难炫耀。我在问我如何在列表框中对其进行格式化?它目前都是混乱的,而不是每个专栏的具体情况。我认为制表会有所帮助,但事实并非如此。你会考虑使用[Grid](http://effbot.org/tkinterbook/grid.htm)而不是'ListBox'来使用 –

回答

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布局。

+0

这只有在使用等宽字体的情况下才有效。 –

+0

布赖恩 - 这是真的,但是就够了。谢谢降档! –