Python Tkinter:如何确定(x,y)坐标以在画布上放置多个帧?

Python Tkinter:如何确定(x,y)坐标以在画布上放置多个帧?,python,tkinter,Python,Tkinter,我试图在tkinter画布上放置多个帧。我希望它们可以滚动,这篇文章真的很有帮助: 有一件事我无法弄清楚,那就是如何确定必须在create_window函数中指定的x,y坐标 每一帧中的行数可变,因此每一帧的高度不同。我希望相邻帧之间的间距相等。为此,我想确定每个帧的高度,以便在For循环中指定如下内容: y_线=y_线+框架高度+间距 我已经搜索了很多,但没有找到任何方法,一旦所有小部件都放在框架上,就可以给出框架的高度。我对帧使用网格管理器,winfo_reqheight方法对所有帧返回1

我试图在tkinter画布上放置多个帧。我希望它们可以滚动,这篇文章真的很有帮助:

有一件事我无法弄清楚,那就是如何确定必须在create_window函数中指定的x,y坐标

每一帧中的行数可变,因此每一帧的高度不同。我希望相邻帧之间的间距相等。为此,我想确定每个帧的高度,以便在For循环中指定如下内容: y_线=y_线+框架高度+间距

我已经搜索了很多,但没有找到任何方法,一旦所有小部件都放在框架上,就可以给出框架的高度。我对帧使用网格管理器,winfo_reqheight方法对所有帧返回1


我真的很困惑。任何帮助都将不胜感激。

我昨天刚刚这么做,假设每行或每列中的每个项目都与同一行/列中的其他项目具有相同的宽度和高度,您可以逐行或逐列建立它,并对坐标进行索引

我这样做的方式是在0,0处创建第一个窗口,然后在调用canvas.bboxtkinter.ALL时锚定nw,它为您提供画布上所有小部件的边界框,因此,如果您开始构建第一行,您将得到一个返回的元组,其中第三项索引2将位于第一项结束的位置。然后,您可以将下一个窗口放置在结果0处,并在画布上构建

然后,您可以在画布上重复此操作,以完成其余的行

下面是我使用的代码摘录,这是在可滚动的画布上制作条目小部件表的简单过程

    xposlist = []
    for row in self.data:
        size = self.canvas.bbox(tk.ALL)
        try:
            y = size[3]+1
        except TypeError:
            y = 0
        for index in range(0, len(row)):
            if len(xposlist) < len(row):
                size = self.canvas.bbox(tk.ALL)
                try:
                    x = size[2]+1
                except TypeError:
                    x = 0
                xposlist.append(x)
            else:
                x = xposlist[index]

            entry = tk.Entry(self.canvas, disabledbackground="white", disabledforeground="black")
            data = row[index]
            if data != "": entry.insert(0, data)
            entry.configure(state="disabled")
            self.canvas.create_window((x,y), anchor="nw", window= entry)
添加所有小部件后,请确保更新滚动区域,使其正确滚动。我通常尝试做的一件事是,如果bbox返回的区域小于画布显示的大小,那么我将滚动区域设置为与可见大小匹配,这样可以防止在画布大部分为空时向上滚动