2017-02-11 67 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

布賴恩 - 這是真的,但是就夠了。謝謝降檔! –