Tkinter中复选框的可变大小列表?

2024-04-23 13:38:24 发布

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

我在做一个编程任务。我在Python中工作,并使用Tkinter作为我们的GUI。我不能更改语言或GUI工具,也不能使用任何其他包(例如Tix)。

我需要列一张要拉的物品清单。我首先想到的是一个复选框。然而,据我所知,Tkinter没有支持大量(100+个)复选框的任何东西。这个数字不是恒定的,而且可能会随着程序的每次运行而不同。在他们自己的框架,我还没有找到一种方法,使框架可滚动。我试过Listbox,但是没有好的方法来选择这个尺度上的倍数。

你们知道怎么做吗?


Tags: 工具方法程序框架语言tkinter编程gui
1条回答
网友
1楼 · 发布于 2024-04-23 13:38:24

Tkinter支持相对无限数量的复选框,主要受系统内存和可用性约束等实际问题的限制。

至少有三种技术可以为小部件创建可滚动的容器。画布和文本小部件都支持滚动,因此通常接受的做法是对容器使用其中的一个。如果需要复杂的内容,还可以使用place命令进行巧妙的操作。

如果要滚动一个不仅仅包含垂直对象列表的帧,那么使用画布是很好的。如果您只需要创建一个垂直列表,那么使用文本小部件非常方便。

下面是一个简单的例子:

import Tkinter as tk

class Example(tk.Frame):
    def __init__(self, root, *args, **kwargs):
        tk.Frame.__init__(self, root, *args, **kwargs)
        self.root = root

        self.vsb = tk.Scrollbar(self, orient="vertical")
        self.text = tk.Text(self, width=40, height=20, 
                            yscrollcommand=self.vsb.set)
        self.vsb.config(command=self.text.yview)
        self.vsb.pack(side="right", fill="y")
        self.text.pack(side="left", fill="both", expand=True)

        for i in range(1000):
            cb = tk.Checkbutton(self, text="checkbutton #%s" % i)
            self.text.window_create("end", window=cb)
            self.text.insert("end", "\n") # to force one checkbox per line

if __name__ == "__main__":
    root = tk.Tk()
    Example(root).pack(side="top", fill="both", expand=True)
    root.mainloop()

随着您对Tkinter了解的更多,您会意识到没有其他工具包那么多内置的小部件。希望你也能意识到Tkinter有足够的基本构造块来做任何你能想象的事情。

相关问题 更多 >