繁体   English   中英

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

[英]Variable size list of Checkboxes in Tkinter?

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

我需要列出要提取的项目。 我首先想到的是一个复选框。 但是,据我所知,Tkinter 没有任何支持大量(100+)复选框的东西。 该数字不是恒定的,并且可能会随着程序的每次运行而不同。 在他们自己的框架中,我还没有找到使框架可滚动的方法。 我试过Listbox ,但没有好的方法来 select 这种规模的倍数。

你们中有人知道这样做的方法吗?

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

至少有三种技术可以为小部件制作可滚动容器。 画布和文本小部件都支持滚动,因此普遍接受的做法是将其中之一用于容器。 如果您需要一些复杂的东西,您还可以使用 place 命令做一些巧妙的技巧。

如果您想要滚动包含多个对象的不仅仅是垂直列表的框架,则使用 canvas 是很好的选择。 如果您只需要创建一个垂直列表,则使用文本小部件非常方便。

这是一个简单的例子:

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 有足够的基本构建块来完成您可以想象的任何事情。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM