Может ли кто-нибудь помочь мне, почему columnspan не влияет на этот код:
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 распределяются в столбце, аналогичном виджетам framebottom. Я хотел сетку из 3 столбцов внутри frame с columnspan = 2 с той же строкой.
Что-то похожее на это:
|| A | B | C ||
| Hello World | Hello World | Hello World |





Frames не влияет на то, как организован ваш код; когда вы используете grid в той же строке, что и создание виджета, None возвращается и сохраняется в переменных, которые вы используете для Frames и Label. Следствием этого является то, что метки вставляются прямо в root.
Следующее делает то же самое с размещением ярлыков по вашему запросу.
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()
столбцы в разных фреймах совершенно не связаны друг с другом.