2015-07-10 40 views
4

在python中,根據字符數很容易填充空格字符串。例如:Python:根據* actual *長度的填充字符串

print "aaa".ljust(10) + "end" 
print "www".ljust(10) + "end" 

輸出是:

aaa  end 
www  end 

其中在此處或任何其他顯示所有字符的大小等於看起來不錯。但是當我在Tkinter程序中輸出這兩個字符串時,它們不會對齊,因爲字符'a'和'w'在任何Tkinter字體中具有不同的長度。

如何對齊Tkinter中的字符串?

我的代碼:

from Tkinter import * 

STANDARD_FONT = ("David",14) 

TO = "TO" 
SUBJECT = "SUBJECT" 
DATE = "DATE" 

content = [ 
    {TO:'Frye', SUBJECT:'Water Pipe Replacement Cost', DATE:'July 9'}, 
    {TO:'George', SUBJECT:'Fw: Cell phone reimbursement', DATE:'July 9'}, 
    {TO:'George, Tim', SUBJECT:'Travel', DATE:'July 10'}, 
    {TO:'Sandy, Jim', SUBJECT:'Fw: Welcome to WOW! - News', DATE:'July 10'}, 
    {TO:'Sandy, Jim', SUBJECT:'Re: Present from paulette', DATE:'July 10'}, 
    {TO:'George, Tim, Sandy, Jim', SUBJECT:'Voices Across Alaska: State Budget Priorities', DATE:'July 10'}, 
    {TO:'Frye', SUBJECT:'FW: Confirmation of the Novemberl 5th discussion', DATE:'July 10'}, 
    {TO:'Jim', SUBJECT:'Re: Happy Thanksgiving!', DATE:'July 11'} 
] 

def makeWindow() : 
    global nameVar, phoneVar, select 
    win = Tk() 

    frame1 = Frame(win) 
    frame1.pack() 

    frame2 = Frame(win)  # Row of buttons 
    frame2.pack() 

    frame3 = Frame(win)  # select of names 
    frame3.pack() 
    scroll = Scrollbar(frame3, orient=VERTICAL) 
    select = Listbox(frame3, yscrollcommand=scroll.set, height=17, width=100, font=STANDARD_FONT) 
    scroll.config (command=select.yview) 
    scroll.pack(side=RIGHT, fill=Y) 
    select.pack(side=LEFT, fill=BOTH, expand=1) 
    return win 

def format_mail_str(mail): 
    to = "To: " + mail[TO] 
    subject = mail[SUBJECT] 
    date = mail[DATE] 
    spacing = " " * 5 

    return to.ljust(40) + spacing + subject.ljust(30) + spacing + date.ljust(15) 


def setSelect() : 
    select.delete(0,END) 
    for mail in content: 
     select.insert (END, format_mail_str(mail)) 

win = makeWindow() 
setSelect() 
win.mainloop() 

我想要的主題和日期都行之間排列。

+5

在GUI或Web瀏覽器中對齊文本通常意味着您只需將文本放在實際列中,而不是依靠文本之間的空白來對齊任何內容。 –

+0

在我的具體案例中,我使用的是Tkinter,它似乎每個字體都有不同長度的字符 – zvisofer

+0

@MartijnPieters,我重寫了我的問題。請重新打開它。 – zvisofer

回答

2

在Windows此代碼排隊「結束」恰好:

import tkinter 

root = tkinter.Tk() 
displaytext1 = "aaa".ljust(10) + "end" 
displaytext2 = "www".ljust(10) + "end" 
tkinter.Label(root, text=displaytext1, font = "Courier").pack() 
tkinter.Label(root, text=displaytext2, font = "Courier").pack() 

root.mainloop() 

檢查()platform.system的值,並使用根據操作系統上的其它固定寬度的字體。

+0

好的答案,但你應該強調關鍵字「固定寬度的字體」。 –

2

我不會回答你問的問題,但我會爲你的問題提出一個解決方案。 你想要的是幾列。 在tkinter中有一個小部件,它是一個樹形視圖。

見例如: http://www.tkdocs.com/tutorial/tree.html

我通常當你想要一個列表(而不是樹)在推薦的樹形構造的

show='headings' 

選項。