【发布时间】:2021-01-15 12:10:11
【问题描述】:
这是主框架的当前布局:frame -- sub_frame2 -- Notebook --(2 个标签作为框架,一个称为 markit_tab,另一个称为 param_tab)。
问题:
即使我只对 param_tab(第二个选项卡)使用包布局管理器,我也会收到此错误
_tkinter.TclError: cannot use geometry manager pack inside .!frame.!frame2.!notebook.!frame2 which already has slaves managed by grid 用于行 self.scrollbar_par.pack(side="right",fill="y")
这没有意义,因为我将 pack 用于 markit_tab 以及上一行我将 pack 用于同一帧并且它没有给我错误。
我将该行更改为 grid(row,column),然后出现此错误:_tkinter.TclError: cannot use geometry manager grid inside .!frame.!frame2.!notebook.!frame2 which already has slaves managed by pack
这对我来说真的没有意义。我怎么可能使用 2 个不同的几何管理器,所以都不让我创建新的东西?
然后
self.sub_frame2 = tk.Frame(self.frame)
nb = ttk.Notebook(self.sub_frame2)
#Middle Frame including first and second tabs.
# first tab
self.markit_tab = ttk.Frame(nb)
self.canvas = Canvas(self.markit_tab, bg="white")
self.table_frame=Frame(self.canvas)
self.scrollbar=Scrollbar(self.markit_tab ,orient="vertical",command=self.canvas.yview)
self.canvas.configure(yscrollcommand=self.scrollbar.set)
self.table_frame.pack(side="left", fill ='both')
self.scrollbar.pack(side="right",fill="y")
self.canvas.pack(fill='both')
self.canvas.create_window((0,0),window=self.table_frame,anchor='nw')
self.table_frame.bind("<Configure>", self.canvas_configure)
# second tab
self.param_tab = ttk.Frame(nb)
self.canvas_par = Canvas(self.param_tab, bg="white")
self.table_frame_par =Frame(self.canvas_par)
self.scrollbar_par =Scrollbar(self.param_tab ,orient="vertical",command=self.canvas_par.yview)
self.canvas_par.configure(yscrollcommand=self.scrollbar_par.set)
self.table_frame_par.pack(side="left", fill ='both')
#self.scrollbar.grid(row=0,column=1)
self.scrollbar_par.pack(side="right",fill="y")
self.canvas_par.pack(fill='both')
self.canvas_par.create_window((0,0),window=self.table_frame_par,anchor='nw')
self.table_frame_par.bind("<Configure>", self.canvas_configure)
nb.add( self.markit_tab, text='Markit')
nb.add(self.param_tab, text='Param')
nb.grid(rows=1)
完全错误:
File ".\single_stocks_project.py", line 520, in <module>
app = MainApplication(root)
File ".\single_stocks_project.py", line 142, in __init__
self.scrollbar.grid(row=0,column=1)
File "C:\Anaconda3\lib\tkinter\__init__.py", line 2226, in grid_configure
+ self._options(cnf, kw))
_tkinter.TclError: cannot use geometry manager grid inside .!frame.!frame2.!notebook.!frame which already has slaves managed by pack ```
【问题讨论】:
-
在任何地方都试过单独使用
pack()? -
删除
self.scrollbar.grid(row=0,column=1)这一行 -
这实际上在原始代码中被注释掉了。我编辑了上面的代码。
-
@CoolCloud 我使用网格,但对于其他框架,它们不应该对此有任何影响。您还可以看到 markit_tab 不受影响,而 param_tab 即使它们实际上是相同的代码。
-
请发布整个错误代码。