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