8

是否可以在另一个框架内的 Tkinter 中放置一个按钮网格?

我想创建一个类似井字游戏的游戏,并希望使用网格功能来放置游戏方块(即按钮)。但是,除了游戏板之外,我还想在 GUI 中添加其他内容,因此将所有内容都放在一个网格中并不理想。

为了显示:

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 小部件。Quoth手册

任何主小部件的大小由内部“从属小部件”的大小决定。打包器用于控制从小部件在打包它们的主窗口中出现的位置。您可以将小部件打包到框架中,并将框架打包到其他框架中,以实现您想要的布局。此外,一旦打包,配置会动态调整以适应配置的增量变化。

实际上,包含(按钮框架)和标签的框架是您必须如何构建您描述的布局的方式。

于 2010-05-04T06:49:56.160 回答