我创建了一个数独求解器,我想显示每个单元格的候选者。 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()
我希望我能很好地描述我的问题。我很感激任何答案。
谢谢
答案 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()