2017-02-05 45 views
1

我需要幫助的Tkinter的對齊字符串Radiobutton垂直對齊字符串指定寬度

Window

正如你所看到的,它不完全一致。我怎樣才能讓「目標」文本垂直對齊?我這樣做是這樣的:

pairs = [None for x in range(10)] 
for i in range(len(startList)): 
    pairs[i] = (''.join(["Start: (", str(startList[i].X), ",", str(startList[i]), ")", '{:>20}'.format(''.join(["Goal: (", str(goalList[i].X), ",", str(goalList[i].Y), ")"]))]), i) 

radioRow = Frame(self) 
radioRow.pack(fill=Y) 
v = IntVar() 
v.set(0) 

for text, mode in pairs: 
    rdButton = Radiobutton(radioRow, text=text, variable=v, value=mode) 
rdButton.pack(anchor=W) 
+0

它可以與具有所有字符相同的寬度等寬字體才能正常工作。 – furas

+0

你必須證明'開始'而不是'目標' - 開始必須使用20個字符。 – furas

回答

2

將文本分爲兩部分小部件:單選按鈕和標籤。然後製作單選按鈕的父級,並標記一個框架,並使用grid將它們排列成兩列十行矩陣。

這裏有一個粗略的例子:

import Tkinter as tk 

data = (
    ((111,2), (14,90)), 
    ((46, 1), (16, 111)), 
    ((94, 1), (16, 111)), 
) 

root = tk.Tk() 
choices = tk.Frame(root, borderwidth=2, relief="groove") 
choices.pack(side="top", fill="both", expand=True, padx=10, pady=10) 

v = tk.StringVar() 
for row, (start, goal) in enumerate(data): 
    button = tk.Radiobutton(choices, text="Start (%s,%s)" % start, value=start, variable=v) 
    label = tk.Label(choices, text="Goal: (%s, %s)" % goal) 
    button.grid(row=row, column=0, sticky="w") 
    label.grid(row=row, column=1, sticky="w") 

# give the invisible row below the last row a weight, so any 
# extra space is given to it 
choices.grid_rowconfigure(row+1, weight=1) 

root.mainloop() 
+0

謝謝,這工作相當不錯。 – cress

+0

你知道爲什麼當我做'v.get()',無論我選擇什麼單選按鈕,我都會返回'0'嗎? – cress

+0

@cress:不,我不會看到你的代碼。雖然,這可能是因爲我給出了單選按鈕的字符串值,但將其綁定到「IntVar」。當我將'IntVar'改爲'StringVar'時,它工作得很好。我改變了我的例子使用'StringVar'。你當然可以使用'IntVar',只要每個單選按鈕都有一個整數作爲值。 –

1

你必須對齊Start,不Goal - {:<10} - 所以它總是使用10個字符。然後Goal將在相同的地方開始。但它只會使用等寬字體

理想的工作
data = [ 
    (111, 2, 14, 90), 
    (46, 1, 16, 111), 
    (94, 1, 38, 1), 
] 

for a, b, c, d in data:  
    start = "({},{})".format(a, b) 
    goal = "({},{})".format(c, d) 

    print("Start: {:<10} Goal: {}".format(start, goal)) 

結果:

Start: (111,2) Goal: (14,90) 
Start: (46,1)  Goal: (16,111) 
Start: (94,1)  Goal: (38,1) 

BTW:您還可以使用grid()創建兩個欄 - 一個與RadiobuttonStart,第二位LabelGoal

+0

感謝您的解釋。如何設置'Radiobuttons'的字體?我查了一下,例子告訴我'import tkFont',但是我得到一個錯誤,說該模塊不存在。 – cress

+0

如果你使用Python 3,那麼'import tkinter.font as tkFont' – furas

+0

or directly'tk.Radiobutton(...,font =(「Courier」,36,「bold」))' – furas