2024-04-23 13:38:24 发布
网友
我在做一个编程任务。我在Python中工作,并使用Tkinter作为我们的GUI。我不能更改语言或GUI工具,也不能使用任何其他包(例如Tix)。
Python
Tkinter
Tix
我需要列一张要拉的物品清单。我首先想到的是一个复选框。然而,据我所知,Tkinter没有支持大量(100+个)复选框的任何东西。这个数字不是恒定的,而且可能会随着程序的每次运行而不同。在他们自己的框架,我还没有找到一种方法,使框架可滚动。我试过Listbox,但是没有好的方法来选择这个尺度上的倍数。
Listbox
你们知道怎么做吗?
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有足够的基本构造块来做任何你能想象的事情。
Tkinter支持相对无限数量的复选框,主要受系统内存和可用性约束等实际问题的限制。
至少有三种技术可以为小部件创建可滚动的容器。画布和文本小部件都支持滚动,因此通常接受的做法是对容器使用其中的一个。如果需要复杂的内容,还可以使用place命令进行巧妙的操作。
如果要滚动一个不仅仅包含垂直对象列表的帧,那么使用画布是很好的。如果您只需要创建一个垂直列表,那么使用文本小部件非常方便。
下面是一个简单的例子:
随着您对Tkinter了解的更多,您会意识到没有其他工具包那么多内置的小部件。希望你也能意识到Tkinter有足够的基本构造块来做任何你能想象的事情。
相关问题 更多 >
编程相关推荐