2017-02-11 2 views
0

Я пытаюсь разработать скрипт, который позволяет мне сохранять форматирование в моем списке.Listbox Python Columns

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

Конец Приведи ListBox населенную с форматированием TБ:

enter image description here

ВОПРОС: КАК ПОЛУЧИТЬ МОЕ LISTBOX ПОЯВИТСЯ, как на картинке выше, что я использовал Tabulate ОТФОРМАТИРОВАТЬ?

Я заметил, что древовидная структура имеет некоторые ограничения с горизонтальной коробкой и расширяет столбцы, не изменяя весь графический интерфейс, поэтому я решил, что это может быть более способный к изменению скорости, который наилучшим образом удовлетворит мои потребности.

+0

Извините, я не полностью слежу за вашей целью. каков твой вопрос? – davedwards

+0

В идеале, я бы хотел, чтобы список был заполнен, так как таблица была отформатирована. –

+0

Это вряд ли хвастается. Я спрашиваю, как мне отформатировать его в списке? В настоящее время это все смешано и не относится к каждому столбцу. Я думал, что таблетирование поможет, но это не так. –

ответ

1

Одним из вариантов может быть использование str.format() для выравнивания каждой вставки в ListBox:

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

Брайан - Это правда, но этого хватит. Спасибо за пониженную передачу! –