在Tkinter中将框架添加到画布

在Tkinter中将框架添加到画布,tkinter,Tkinter,使用Tkinter,我有一个名为self.edit_的顶级窗口、一个名为Frame的框架和一个名为Canvas的画布。我要做的就是将框架添加到画布中,我尝试使用create_window方法: #make canvas canvas = Tkinter.Canvas(self.edit_window) #make frame and add to canvas frame = Tkinter.Frame() canvas.create_window(0,0, anchor = Tkconst

使用Tkinter,我有一个名为self.edit_的顶级窗口、一个名为Frame的框架和一个名为Canvas的画布。我要做的就是将框架添加到画布中,我尝试使用create_window方法:

#make canvas
canvas = Tkinter.Canvas(self.edit_window) 

#make frame and add to canvas
frame = Tkinter.Frame()
canvas.create_window(0,0, anchor = Tkconstants.NW, window = frame, width = 200, height = 200)
我在create_窗口调用中得到以下错误:

TclError: can't use .173048428 in a window item of this canvas

我不知道那是什么意思。有什么想法吗?

您提供的代码没有给出此错误。您确定代码足以说明问题吗

也就是说,您所说的错误与尝试向画布添加一个不是画布同级或子级的窗口是一致的。根据tk官方文件:

路径名指定的窗口必须是画布的子窗口 小部件或画布小部件的某个祖先的子部件。路径名可能 不是指顶层窗口


如果您将框架设置为画布的子对象,则此问题将消失(但严格来说,它不一定是直接子对象)。

您是否尝试了anchor=NW?是的,我导入的方式必须将Tkconstants添加到其中。anchor与此问题无关。后一部分解决了此问题。正如我所说,self.edit_窗口是一个Tkinter.Toplevel。由于我没有为框架指定任何父级,self.edit_窗口不是框架的祖先。但我确实将画布指定为self.edit\u窗口的子窗口。如果我将frame声明为:frame=Tkinter.frame(self.edit_窗口),那么现在frame和canvas都有一个共同的祖先。还要注意,如果我将canvas声明为canvas=Tkinter.canvas(root),其中root是我的主窗口,那么它也可以工作,因为框架默认为root的子级,因为我没有将其传递给父级。