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

2024-05-02 01:03:25 发布

您现在位置:Python中文网/ 问答频道 /正文

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

Adding a scrollbar to a group of widgets in Tkinter

我不能在窗口中指定一个坐标。在

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

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

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


Tags: ofto方法in框架高度tkinter画布
1条回答
网友
1楼 · 发布于 2024-05-02 01:03:25

我昨天就这么做了,假设每一行或每列中的每一项都是相同的宽.高与同一行/列中的其他项目一样,您可以逐行或逐列建立它,并对坐标进行索引。在

我这样做的方法是在(0,0)处创建第一个窗口,然后在调用时锚定“nw”画布.bbox(所有人)它为您提供画布上所有小部件的边界框,因此,如果您从构建第一行开始,您将得到一个返回的元组,其中第三项(索引2)将是第一项结束的位置。然后,可以将下一个窗口放在(result,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返回的区域小于画布显示的大小,那么我将滚动区域设置为与可见大小相匹配,这样当画布大部分为空时就无法向上滚动。在

相关问题 更多 >