框架内的网格?

8 投票
2 回答
35850 浏览
提问于 2025-04-15 22:19

可以在Tkinter中把一组按钮放在另一个框架里吗?

我想做一个类似井字棋的游戏,想用网格功能来放置游戏方块(这些方块会是按钮)。不过,我还想在界面上放一些其他的东西,而不仅仅是游戏板,所以把所有东西都放在一个网格里并不是最理想的选择。

举个例子:

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()

2 个回答

1

你可以把Tk的控件随意嵌套得很深。手册上是这么说的:

任何主控件的大小是由里面的“从控件”的大小决定的。我们使用打包器来控制从控件在主控件中的位置。你可以把控件放进框架里,然后把框架放进其他框架里,这样就能实现你想要的布局。此外,一旦控件被打包,布局会根据配置的变化自动调整。

实际上,包含一个(按钮框架)和一个标签的框架就是你需要的布局结构。

11

我终于找到了一个方法来实现这个功能:

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()

把网格放在一个框架里,然后再放在另一个框架里,这样做有点像是变通的方法,可以让网格周围的边距正常工作,不过效果不错,我很满意。

撰写回答