Is it possible to place a grid of buttons in Tkinter inside another frame?
I'm wanting to create a tic-tac-toe like game and want to use the grid feature to put gamesquares (that will be buttons). However, I'd like to have other stuff in the GUI other than just the game board so it's not ideal to just have everything in the one grid.
To illustrate:
O | X | X |
---------- |
O | O | X | Player 2 wins!
---------- |
X | O | X |
The tic tac toe board is in a grid that is made up of all buttons and the 'player 2 wins' is a label inside a frame.
This is an oversimplification of what I'm trying to do so bear with me, for the way I've designed the program so far (the board is dynamically created) a grid makes the most sense.
Edit: Had a thought but when I run it, nothing happens? If I take out the frame bit it does. Any ideas?
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()
Figured out a way to do it finally:
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()
Having the grid inside a frame inside a frame is a bit of a hack to get the padding around the grid working but it works so I'm happy.
You can nest Tk widgets arbitrarily deep. Quoth the manual:
The size of any master widget is
determined by the size of the “slave
widgets” inside. The packer is used to
control where slave widgets appear
inside the master into which they are
packed. You can pack widgets into
frames, and frames into other frames,
in order to achieve the kind of layout
you desire. Additionally, the
arrangement is dynamically adjusted to
accommodate incremental changes to the
configuration, once it is packed.
Indeed, a frame containing a (frame of buttons) and a label is how you must structure the layout you describe.