如何在Tkinter中将Label中的数字排列成网格?

时间:2013-05-04 12:08:16

标签: python grid tkinter label sudoku

我创建了一个数独求解器,我想显示每个单元格的候选者。 Sudoku网格是Label小部件的列表,我将这些候选者安排到网格中时遇到问题。我的目标是this(没有颜色)。我已将它们放在网格中,但数字“0”仍然可见。而且我在问你如何隐藏这些零。我试图用空格(“”)替换“0”,但显示括号。

我的代码:

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 个答案:

答案 0 :(得分: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()