【问题标题】:Grid within a frame?框架内的网格?
【发布时间】:2010-05-04 06:31:27
【问题描述】:

是否可以将 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()

【问题讨论】:

  • 似乎什么也没发生的原因是您在同一个父级中同时使用了 grid 和 pack(b.grid() 和 f.pack() 都会影响根小部件)。这可能会导致各种不良行为。在单个容器中,您应该只使用其中一个。在您的整个应用程序中,只要您不直接在同一个容器中使用它们,您就可以随意混合它们。

标签: python grid tkinter frame


【解决方案1】:

终于想出了一个办法:

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

在一个框架内的一个框架内有一个网格是一个小技巧,让网格周围的填充工作,但它工作,所以我很高兴。

【讨论】:

  • 网格不是一个“东西”,它是小部件用来在框架内排列自己的一种方法;请注意,没有构造 Grid。这是 Tk 的构图模型,它类似于 TeX 本身源自 500 年的印刷经验。嵌套框是我们发现的用于排列类似文本的对象的方法:它不是 hack。
  • 很好的答案 = 帮助我解决了我多年来一直在努力解决的问题。
【解决方案2】:

您可以任意深度地嵌套 Tk 小部件。 manual:

任何主小部件的大小都是 由“奴隶”的大小决定 小部件”里面。封隔器用于 控制从属小部件出现的位置 在他们所在的主人里面 打包。您可以将小部件打包到 帧和帧到其他帧, 为了实现那种布局 你渴望。此外, 排列被动态调整为 适应增量变化 配置,一旦打包。

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

【讨论】:

  • 你是说我问的是不可能的吗?我知道我可以在框架内放置一个框架,但是否可以在框架内放置一个网格?
  • @Sam:你不能“在框架内放置网格”,因为网格不是你可以放置的东西。 grid() 方法只是将小部件放置在容器中。您不是“添加网格”,您只是“以网格模式放置小部件”。而且,正如答案所说,您可以任意深度地嵌套 Tk 小部件(尽管根据我多年的经验,您很少需要超过 3 或 4 层)。
猜你喜欢
  • 2014-12-16
  • 1970-01-01
  • 1970-01-01
  • 2015-03-24
  • 1970-01-01
  • 1970-01-01
  • 2012-10-12
  • 1970-01-01
  • 2014-12-30
相关资源
最近更新 更多