1

我创建了一个数独求解器,我想显示每个单元格的候选者。数独网格是标签小部件的列表,我在将这些候选者排列到网格中时遇到问题。我的目标是这样的(没有颜色)。我已经将它们放在网格中,但数字“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()

我希望我能很好地描述我的问题。我很感激任何答案。

谢谢

4

1 回答 1

1

使用text_wrong2 = ' '.join(map(str,[1,2,3,4," "," "," ",8,9]))而不是直接将列表作为文本选项传递。请记住,默认字体不是等宽的,因此数字不会像其他两个示例那样对齐。

除此之外,我建议您使用grid而不是place,并使用 a 表示每个数字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()
于 2013-05-04T12:24:46.267 回答