Ошибка говорит вам, что именно не так. Вы не можете использовать grid
для виджета в корневом окне, когда вы уже использовали pack
для управления виджетом в корневом окне.
Вы писали:
Затем он инициализирует фрейм self.mainframe и внутри этого фрейма инициализирует grid ()
Нет, это не то, что делает ваш код. Он не устанавливает сетку в кадре, он пытается использовать grid
для добавления виджета в корневое окно.
Сначала у вас есть эта строка кода, которая использует pack
для виджета в корневом окне:
self.pack(fill=BOTH,expand=1)
Позже вы пытаетесь использовать grid
для другого окна в корневом окне:
self.mainframe = Frame(root)
self.mainframe.grid(column=0,row=0, sticky=(N,W,E,S) )
Выше не устанавливаетсявверх по сетке в пределах self.mainframe
, он использует grid
для добавления виджета в корневое окно.
Вам нужно использовать одно или другое, вы не можете использовать оба для разных окон, которые оба являются прямыми потомками корневого окна.
Другими словами, вы делаете это:
self.pack(fill=BOTH,expand=1)
self.mainframe.grid(column=0,row=0, sticky=(N,W,E,S) )
, но так как self
и self.mainframe
являются прямым потомком корневого окна, вы не можете этого сделать,Вам нужно либо использовать pack
для обоих:
self.pack(fill=BOTH,expand=1)
self.mainframe.pack(...)
... или grid
для обоих:
self.grid(...)
self.mainframe.grid(column=0,row=0, sticky=(N,W,E,S) )