8

別のフレーム内のTkinterにボタンのグリッドを配置することは可能ですか?

三目並べのようなゲームを作成し、グリッド機能を使用してゲームスクエア(ボタンになります)を配置したいと考えています。ただし、GUIにはゲームボード以外のものを入れたいので、すべてを1つのグリッドに入れるのは理想的ではありません。

説明する:

O | X | X   |
----------  |
O | O | X   | Player 2 wins!
----------  | 
X | O | X   |

三目並べはすべてのボタンで構成されるグリッド内にあり、「プレーヤー2勝」はフレーム内のラベルです。

これは、私がやろうとしていることを単純化しすぎているためです。これまでのプログラムの設計方法(ボードは動的に作成されます)では、グリッドが最も理にかなっています。

編集:考えていましたが、実行しても何も起こりませんか?フレームビットを取り出すとそうなります。何か案は?

from Tkinter import * 

root = Tk()

b = Button(root, text = "1")
b.grid(row=1, column=3)
b2 = Button(root, text = "2")
b2.grid(row=1, column=4)

f = Frame(root, bg = "red")
f.pack(side=RIGHT)

root.mainloop()
4

2 に答える 2

9

最終的にそれを行う方法を考え出しました:

from Tkinter import * 

root = Tk()

f = Frame(root, bg = "orange", width = 500, height = 500)
f.pack(side=LEFT, expand = 1)

f3 = Frame(f, bg = "red", width = 500)
f3.pack(side=LEFT, expand = 1, pady = 50, padx = 50)

f2 = Frame(root, bg = "black", height=100, width = 100)
f2.pack(side=LEFT, fill = Y)

b = Button(f2, text = "test")
b.pack()

b = Button(f3, text = "1", bg = "red")
b.grid(row=1, column=3)
b2 = Button(f3, text = "2")
b2.grid(row=1, column=4)
b3 = Button(f3, text = "2")
b3.grid(row=2, column=0)

root.mainloop()

フレーム内のフレーム内にグリッドを配置することは、グリッドの周りのパディングを機能させるためのちょっとしたハックですが、それは機能するので、私は満足しています。

于 2010-05-04T07:24:44.923 に答える
1

Tkウィジェットを任意の深さにネストできます。マニュアルを引用してください:

マスターウィジェットのサイズは、内部の「スレーブウィジェット」のサイズによって決まります。パッカーは、スレーブウィジェットがパックされるマスター内のどこに表示されるかを制御するために使用されます。ウィジェットをフレームにパックし、フレームを他のフレームにパックして、希望する種類のレイアウトを実現できます。さらに、配置は、パックされると、構成への増分変更に対応するように動的に調整されます。

実際、(ボタンのフレーム)とラベルを含むフレームは、説明するレイアウトを構造化する方法です。

于 2010-05-04T06:49:56.160 に答える