tkinter canvas – список флажков неполный

при построении чеккнопочного списка (3000 случаев) список обрезается.

Вот небольшой образец:

import tkinter as tk

class Example(tk.Frame):
    def __init__(self, parent):

        tk.Frame.__init__(self, parent)
        self.canvas = tk.Canvas(self, borderwidth=0, background="#ffffff")
        self.frame = tk.Frame(self.canvas, background="#ffffff")
        self.vsb = tk.Scrollbar(self, orient="vertical", command=self.canvas.yview)
        self.canvas.configure(yscrollcommand=self.vsb.set)

        self.vsb.pack(side="right", fill="y")
        self.canvas.pack(side="left", fill="both", expand=True)
        self.canvas.create_window((4,4), window=self.frame, anchor="nw",
                                  tags="self.frame")

        self.frame.bind("<Configure>", self.onFrameConfigure)

        self.populate()

    def populate(self):

        for row in range(3000):

            t="Example -Checkbutton %s" %row
            button = tk.Checkbutton(self.frame, padx=7, relief=tk.RIDGE, text=t,                                    
                                onvalue=1, offvalue=0,  font='Courier 12')
            button.grid(row=row, column=1, sticky='news')
            
    def onFrameConfigure(self, event):
        self.canvas.configure(scrollregion=self.canvas.bbox("all"))

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

Вывод программы:

| | Пример контрольного списка 0


| | Пример контрольного списка 1123


| | Пример контрольного списка 1126


| | Пример контрольного списка 1125



| | Пример контрольного списка 2999

Примеры контрольных списков 1126-2998 не отображаются, а пример контрольного списка 2999 обозначен двойной линией.

Есть ли параметр, отображающий полный список?


person Eddi    schedule 14.10.2020    source источник
comment
Canvas с ‹configure› обычно может обрабатывать около 10-10^2 небольших элементов с нормальной скоростью (без каких-либо задержек). У вас все в порядке с 3 * 10 ^ 3 кнопками проверки? Это было медленно с моей стороны   -  person RahulARanger    schedule 14.10.2020
comment
@RahulARanger: я не думаю, что вы действительно имели в виду 10-10^2. Это -90.   -  person Bryan Oakley    schedule 14.10.2020
comment
Похоже, что существует ограничение на create_window(), см. другой вопрос.   -  person acw1668    schedule 14.10.2020
comment
@BryanOakley Я думаю, что RahulARanger означает от 10 до 10 ^ 2.   -  person acw1668    schedule 14.10.2020
comment
@BryanOakley с 10 до 10^2   -  person RahulARanger    schedule 14.10.2020
comment
Рауаль: с 3 * 10 ^ 3 кнопками проверки — это именно то, что мне нужно. Я знаю, что сборка списка идет медленно, но это решает проблему. Каково ваше решение этой проблемы?   -  person Eddi    schedule 14.10.2020
comment
Полотно не имеет неограниченных размеров. Вероятно, вы достигли предела.   -  person Bryan Oakley    schedule 14.10.2020
comment
@Eddi вместо полосы прокрутки используйте что-то вроде ‹ › стрелки для навигации между кадрами (каждый кадр имеет 20-30 кнопок проверки) (вы можете использовать файл JSON для хранения значений)   -  person RahulARanger    schedule 19.10.2020