【问题标题】:Variable size list of Checkboxes in Tkinter?Tkinter中可变大小的复选框列表?
【发布时间】:2011-08-17 04:04:10
【问题描述】:

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

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

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

【问题讨论】:

    标签: python checkbox tkinter


    【解决方案1】:

    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 有足够的基本构建块来做任何你能想象到的事情。

    【讨论】:

    • 感谢您的帮助。我会投赞成票,但显然我还不够酷,无法投赞成票。
    • @Bryan Oakley - Checkbutton 的主人应该在这里指定吗?当窗口不是 root 时(例如,如果您在 Toplevel() 上尝试此操作),我无法使其正常工作
    • @gnr:是的,你是对的。我已经更新了这个例子。感谢您提请我注意。
    • 我想删除 Text 小部件的内容,然后重新填充它,.delete 似乎没有删除这些窗口。如何清空 Text 小部件?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 2019-04-16
    • 1970-01-01
    • 1970-01-01
    • 2017-11-03
    • 2016-02-20
    • 2023-04-08
    相关资源
    最近更新 更多