2013-05-04 3 views
1

나는 스도쿠 해결사를 만들고 각 셀에 대한 후보자를 보여주고 싶습니다. 스도쿠 격자는 레이블 위젯의 목록이며 이러한 후보를 격자로 정렬하는 데 문제가 있습니다. 내 목표는 this (색이 없음)과 같습니다. 이미 격자가 있지만 숫자 "0"이 계속 표시됩니다. 그리고이 0을 숨기는 방법을 묻고 있습니다. "0"대신 공백 ("")을 사용하려고했지만 대괄호가 대신 표시됩니다.Tkinter의 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] 

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])) 대신 주셔서 감사합니다. 기본 글꼴은 고정 폭 글꼴이 아니므로 숫자가 다른 두 예제와 같이 정렬되지 않습니다.

이 외에도에서, 당신이 대신 placegrid를 사용하고 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

이것은 완전히 옳지 않습니다. 0은 숨겨져 있지만 분명히 긍정적이지만 숫자 4는 1 미만이어야합니다. 8은 2 이하이어야합니다. 이것이 주요 문제입니다. 당신에게'그리드 노트. 'grid '를 한 번 사용했지만'Label'의 크기를 픽셀 단위로 설정할 수 없었습니다. 항상 글꼴 크기에 의존적인데, 이는 꽤 불편합니다. 이것이 제가 대신'장소 '를 사용하는 유일한 이유입니다. –

+0

@ MilanSkála 그게 내가 의미하는 바 _ "기본 글꼴은 고정 폭 글꼴이 아니므로 숫자는 다른 두 예제처럼 정렬되지 않습니다."_. 사실, 코드의 문제 중 하나는 글꼴 크기에 의존한다는 것입니다. 그래서 다른 지오메트리 관리자를 제안했습니다. 내 답변을 업데이트하여 '그리드'를 사용하여 해결책을 볼 수 있습니다. –