2017-12-29 54 views
-2

私はsudokuパズルジェネレーター用の9x9グリッドを作成しています。 これまで、フレームの最初の行に9つの変数を作成し、9つの変数にグリッド行/列を割り当てました。私が使用しているコードは以下の通りです。9x9グリッドをより効率的に作成するにはどうすればいいですか? (Python、Tkinter)

グリッド用に81個のセルを作成する必要があるため、これを実行するより効率的な方法が必要です。どうすればより効率的に/もっとうまくいくのですか?助けてください!

コード:

from tkinter import * 

root = Tk() 
root.title('Sudoku') 
root.geometry('1000x1000') 

# create all of the main containers 
center = Frame(root, bg='white', width=900, height=900, padx=3, pady=3) 

# layout all of the main containers 
root.grid_rowconfigure(9, weight=1) 
root.grid_columnconfigure(9, weight=1) 
center.grid(row=1, sticky="nsew") 

# create the center widgets 
center.grid_rowconfigure(0, weight=1) 
center.grid_columnconfigure(1, weight=1) 

cell1 = Frame(center, bg='white', highlightbackground="black", highlightcolor="black", highlightthickness=1, width=100, height=100, padx=3, pady=3) 
cell2 = Frame(center, bg='white', highlightbackground="black", highlightcolor="black", highlightthickness=1, width=100, height=100, padx=3, pady=3) 
cell3 = Frame(center, bg='white', highlightbackground="black", highlightcolor="black", highlightthickness=1, width=100, height=100, padx=3, pady=3) 
cell4 = Frame(center, bg='white', highlightbackground="black", highlightcolor="black", highlightthickness=1, width=100, height=100, padx=3, pady=3) 
cell5 = Frame(center, bg='white', highlightbackground="black", highlightcolor="black", highlightthickness=1, width=100, height=100, padx=3, pady=3) 
cell6 = Frame(center, bg='white', highlightbackground="black", highlightcolor="black", highlightthickness=1, width=100, height=100, padx=3, pady=3) 
cell7 = Frame(center, bg='white', highlightbackground="black", highlightcolor="black", highlightthickness=1, width=100, height=100, padx=3, pady=3) 
cell8 = Frame(center, bg='white', highlightbackground="black", highlightcolor="black", highlightthickness=1, width=100, height=100, padx=3, pady=3) 
cell9 = Frame(center, bg='white', highlightbackground="black", highlightcolor="black", highlightthickness=1, width=100, height=100, padx=3, pady=3) 

#create first row of grid 

cell1.grid(row=0, column=0) 
cell2.grid(row=0, column=1) 
cell3.grid(row=0, column=2) 
cell4.grid(row=0, column=3) 
cell5.grid(row=0, column=4) 
cell6.grid(row=0, column=5) 
cell7.grid(row=0, column=6) 
cell8.grid(row=0, column=7) 
cell9.grid(row=0, column=8) 

root.mainloop() 
+1

forループを使用しますか? '私は範囲(81)にある: ' – Novel

+3

それは良い質問ですが、他のところでは素晴らしい答えがあります。ネストリスト(Python)または2次元配列(tkinter)に関するチュートリアルを検索します。スタックオーバーフローは、精神的プログラミングに関するチュートリアルの場所ではありません。 – Prune

答えて

1

行のループ、および列のループ。辞書内のウィジェットへのストア参照:上記で

cells = {} 
for row in range(9): 
    for column in range(9): 
     cell = Frame(center, bg='white', highlightbackground="black", 
        highlightcolor="black", highlightthickness=1, 
        width=100, height=100, padx=3, pady=3) 
     cell.grid(row=row, column=column) 
     cells[(row, column)] = cell 

、あなたはcellsのdictを経由して任意のウィジェットを参照することができます。たとえば、行3、列4(ゼロから数えて)のセルを赤に設定するには、次のようにします。

cells[(3,4)].configure(background="red") 
+0

これを試みましたが、構文エラーが発生しました –

+0

'cells = dict()'はこの特定のケースでは 'cells = list() 'より優れていますか?私は通常、 'grid'レイアウトが使用されているときにlistを使うほうが簡単だと思います。 – Nae

+0

@Nae:優越性は純粋に主観的です。私は個人的にリストのリストより辞書を使いやすくしています。 –

関連する問題