2017-05-19 2 views
0

나는 "초보자"파이썬 사용자입니다.파이썬 tkinter 목록 상자 입력 형식

나는 Tkinter의를 사용하여 목록 상자를 그리고 나는 그들이 정렬되도록 목록 항목의 서식을 원하고, 나는 다음 있습니다 : 목록 상자 항목이 멋지게 인쇄로 포맷되지 않은 이유를

from Tkinter import * 
master = Tk() 

info=[ ['sue', 1, 'Argentina', 'Bsc'], 
    ['peggy-sue', 17, 'U.K.', 'Bsc'], 
    ['susie', 234, 'France', 'BA'] 
] 

listbox = Listbox(master, width=60) 
listbox.pack() 

listbox.insert(END, "{:<15s} {:>5s} {:<25s} {:<5s}".format("Name","id","Nationality","Qual")) 

for i in range(len(info)): 
    item = "{:<15s} {:>5d} {:<25s} {:<5s}".format(info[i][0],info[i][1],info[i][2],info[i][3]) 
    print item # Gives nicely formatted lines 
    listbox.insert(END, item) #Lines are not nicely formatted in listbox 

mainloop() 

사람이 설명 할 수 줄은?

여러 열로 구성된 목록 상자 (예 : Display Listbox with columns using Tkinter?)에 대한 정보를 알고 있으므로 해결책이 필요하지 않습니다. 예상했던대로 작동하지 않는 이유에 관심이 있습니다.

덕분에

+0

을 당신이 필요 각 요소의 길이에 따라 요소 사이의 공백 수를 변경하십시오. 내가 작동하게 할 수 있는지 알 겠어.하지만 그 일은 상당히 간단해야한다. – pointerless

답변

2

기본 글꼴은 문자와 동일한 폭을 사용하지 않습니다. 시도 (예를 들어, 당신이 윈도우에있는 가정) :이 결과

listbox = Listbox(master, width=60, font='consolas') 

을 다음

TKinter window using Consolas, with equal spacing

+0

감사합니다.이 질문에 대한 답변입니다. 나는 리눅스에서 글꼴 = '모노'가 작동한다는 것을 알고있다. – TCJUK

+0

@TCJUK는 그것을 듣고있어 기쁘다. 그리고 앞으로 리눅스에서 '모노'를 염두에 두겠다! 답변의 왼쪽에있는 체크를 클릭하여 질문에 대한 답변으로 표시 할 수 있습니다. – asongtoruin

0
@asongtoruin만큼 좋은하지

하지만

from Tkinter import * 
master = Tk() 

info=[ ['sue', 1, 'Argentina', 'Bsc'], 
     ['peggy-sue', 17, 'U.K.', 'Bsc'], 
     ['susie', 234, 'France', 'BA'] 
] 

heads = ["Name","id","Nationality","Qual"] 
listbox = Listbox(master, width=60) 
listbox.pack() 
fixedlen = 10 
listbox.insert(END, ("{:<15s}"+(fixedlen-len(heads[0]))*" " +"{:>5s}"+(fixedlen-len(heads[1]))*" " +"{:<25s}"+(fixedlen-len(heads[2]))*" " +"{:<5s}").format(heads[0],heads[1],heads[2],heads[3])) 

for i in range(len(info)): 
    item = ("{:<15s}"+(fixedlen-len(str(info[i][0])))*" " +"{:>5d}"+(fixedlen-len(str(info[i][1])))*" " +"{:<25s}"+(fixedlen-len(str(info[i][2])))*" " +"{:<5s}").format(info[i][0],info[i][1],info[i][2],info[i][3]) 
    print item # Gives nicely formatted lines 
    listbox.insert(END, item) #Lines are not nicely formatted in listbox 

mainloop()