Reputation: 91
Can anyone help me why columnspan
not having any effect in this code:
import tkinter as tk
root = tk.Tk()
frametop = tk.Frame(root).grid(row = 0, column = 0, columnspan = 2)
labeltest1 = tk.Label(frametop, text="A").grid(row = 0, column = 0)
labeltest2 = tk.Label(frametop, text="B").grid(row = 0, column = 1)
labeltest3 = tk.Label(frametop, text="C").grid(row = 0, column = 2)
framebottom = tk.Frame(root).grid(row = 1, column = 0)
labeltest4 = tk.Label(framebottom, text="Hello World").grid(row = 1, column = 0)
labeltest5 = tk.Label(framebottom, text="Hello World").grid(row = 1, column = 1)
labeltest6 = tk.Label(framebottom, text="Hello World").grid(row = 1, column = 2)
root.mainloop()
labeltest1
, labeltest2
, labeltest3
are being distributed in column similar to the widgets of framebottom
. What I wanted is a grid of 3 columns inside a frame
with a columnspan = 2
with the same row.
Something similar to this:
|| A | B | C ||
| Hello World | Hello World | Hello World |
Upvotes: 0
Views: 595
Reputation: 36732
The way your code is organized, the Frames
have no effect; when you grid
on the same line as the widget creation, None
gets returned and stored in the variables you are using for the Frames
, and Label
. A consequence is that the labels are inserted directly into root
.
The following does the same, with a placement of the labels per your request.
import tkinter as tk
root = tk.Tk()
tk.Label(root, text="A").grid(row=0, column=0, columnspan=2)
tk.Label(root, text="B").grid(row=0, column=2, columnspan=2)
tk.Label(root, text="C").grid(row=0, column=4, columnspan=2)
tk.Label(root, text="Hello World").grid(row=1, column=0, columnspan=3)
tk.Label(root, text="Hello World").grid(row=1, column=3, columnspan=3)
tk.Label(root, text="Hello World").grid(row=1, column=6, columnspan=3)
root.mainloop()
Upvotes: 1