Python 为什么我不能使用tkinter几何图形管理器栅格?

Python 为什么我不能使用tkinter几何图形管理器栅格?,python,tkinter,Python,Tkinter,我正在尝试构建一个简单的tkinter GUI,但出现以下错误: _tkinter.TclError:无法在内部使用几何图形管理器栅格。它已经有了由pack管理的奴隶 这是我的密码: file_menu = Menu(menu_bar, tearoff=0) file_menu.add_command(label='New') file_menu.add_separator() file_menu.add_command(label='Exit', command=_quit) menu_bar

我正在尝试构建一个简单的tkinter GUI,但出现以下错误:

_tkinter.TclError:无法在内部使用几何图形管理器栅格。它已经有了由pack管理的奴隶

这是我的密码:

file_menu = Menu(menu_bar, tearoff=0)
file_menu.add_command(label='New')
file_menu.add_separator()
file_menu.add_command(label='Exit', command=_quit)
menu_bar.add_cascade(label='File', menu=file_menu)

help_menu = Menu(menu_bar, tearoff=0)
help_menu.add_command(label='About')
menu_bar.add_cascade(label='Help', menu=help_menu)

tab_controller = ttk.Notebook(win)

tab_1 = ttk.Frame(tab_controller)
tab_controller.add(tab_1, text='NOAA')

tab_2 = ttk.Frame(tab_controller)
tab_controller.add(tab_2, text='Station IDs')

tab_3 = ttk.Frame(tab_controller)
tab_controller.add(tab_3, text='Images')

tab_4 = ttk.Frame(tab_controller)
tab_controller.add(tab_4, text='Open Weather Map')

tab_controller.pack(expand=1, fill='both')

weather_conditions_label_frame = ttk.LabelFrame(tab_1, text='Current Weather Conditions').grid(column=0, row=1,                                                                                            padx=WEATHER_CONDITIONS_LABEL_FRAME_PAD_X,                                                                                            pady=WEATHER_CONDITIONS_LABEL_FRAME_PAD_Y)

ttk.Label(weather_conditions_label_frame, text='Last Update').grid(column=0, row=1, sticky='E')
last_update_entry_var = tk.StringVar()
last_update_entry = ttk.Entry(weather_conditions_label_frame, width=ENTRY_WIDTH, textvariable=last_update_entry_var, state='readonly')
last_update_entry.grid(column=1, row=1, sticky='W')

有什么想法吗?

天气条件标签框架
,因为你需要
窗口条件标签框架=LabelFrame(…).grid(…)
。稍后,您将执行
ttk.Entry(天气条件标签框架…)
操作,该操作将该条目放置在根窗口中,因为主窗口是
None
tab\u controller
已使用
pack
添加到根窗口中,因此当您尝试调用
grid
时,会出现错误

解决方案是将小部件创建与小部件布局分开:

weather_conditions_label_frame = ttk.LabelFrame(...)
weather_conditions_label_frame.grid(...)

weather\u conditions\u label\u frame
None
,因为您需要
windows\u conditions\u label\u frame=LabelFrame(…).grid(…)
。稍后,您将执行
ttk.Entry(天气条件标签框架…)
操作,该操作将该条目放置在根窗口中,因为主窗口是
None
tab\u controller
已使用
pack
添加到根窗口中,因此当您尝试调用
grid
时,会出现错误

解决方案是将小部件创建与小部件布局分开:

weather_conditions_label_frame = ttk.LabelFrame(...)
weather_conditions_label_frame.grid(...)

这正是问题所在:您需要为几何体管理器做出选择,然后为父窗口小部件中的所有窗口小部件使用一个几何体管理器。您可能也希望在此处查看此答案:这正是问题所在:您需要为几何体管理器做出选择,然后为父窗口中的所有窗口小部件使用一个几何体管理器父窗口小部件。您也可以在此处查看此答案: