2013-05-04 57 views
1

我創建了一個數獨求解器,我想要顯示每個單元格的候選人。數獨網格是標籤小部件的列表,我在將這些候選項安排到網格時遇到問題。我的目標是像this(沒有顏色)。我已經有了它們,但數字「0」仍然可見。我問你如何隱藏這些零。我嘗試用空格(「」)替換「0」,但是卻顯示括號。如何在Tkinter中將標籤中的數字排列成網格?

我的代碼:

from Tkinter import * 

root = Tk() 

text_good = [1,2,3,4,5,6,7,8,9] 
text_wrong1 = [1,2,3,4,0,0,0,8,9] 
text_wrong2 = [1,2,3,4," "," "," ",8,9] 

L1 = Label(root,bg="red",text=text_good,wraplength=30) 
L1.place(x=0,y=0,width=50,height=50) 

L2 = Label(root,bg="red",text=text_wrong1,wraplength=30) 
L2.place(x=50,y=0,width=50,height=50) 

L3 = Label(root,bg="red",text=text_wrong2,wraplength=30) 
L3.place(x=100,y=0,width=50,height=50) 

root.mainloop() 

我希望我描述了我的問題很好。我很欣賞任何答案。

謝謝你直接通過列表的文本選項

回答

1

使用text_wrong2 = ' '.join(map(str,[1,2,3,4," "," "," ",8,9]))代替。請記住,默認字體不是等寬字體,所以數字不會像其他兩個示例中那樣對齊。

除此之外,我推薦你使用grid代替place,並使用Label,而不是隻使用一個爲每個小區依靠那些由於寬度的增加新線表示每一個數字。因此,您不必擔心爲每個標籤處理偏移量。

from Tkinter import * 

root = Tk() 

text_good = [1,2,3,4,5,6,7,8,9] 
text_wrong1 = [1,2,3,4,0,0,0,8,9] 
text_wrong2 = [1,2,3,4," "," "," ",8,9] 

def create_box(text_list, **grid_options): 
    frame = Frame(root, bg="red") 
    for i, text in enumerate(text_list): 
     Label(frame, text=text, bg="red").grid(row=i//3, column=i%3) 
    frame.grid(**grid_options) 

create_box(text_good, row=0, column=0, padx=10) 
create_box(text_wrong1, row=0, column=1, padx=10) 
create_box(text_wrong2, row=0, column=2, padx=10) 

root.mainloop() 
+0

這不完全正確。零點是隱藏的,這當然是肯定的,但是四號應該在1以下。8應該在2點以下等。這是主要問題。給你'網格'注意。 我曾經使用過'grid',但是我沒有能力設置像素大小的'Label'。它總是依賴於字體大小,這是相當不方便的。這是我使用'place'代替的唯一原因。 – 2013-05-04 12:35:56

+0

@MilanSkála這就是我的意思_「缺省字體不是等寬字體,所以數字不會像其他兩個示例中那樣對齊」_。事實上,你的代碼的問題之一是它依賴於字體大小,這就是爲什麼我建議另一個幾何管理器。我已經更新了我的答案,以便您可以使用'grid'查看解決方案。 – 2013-05-04 23:00:09

相關問題