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 достаточно фундаментальных строительных блоков, чтобы делать практически все, что вы можете себе представить.