Ткинтер замедляется после перезапуска - PullRequest
0 голосов
/ 07 октября 2019

Я столкнулся с проблемой в python3 с библиотекой Tkinter

Я рендерил много виджетов, затем закрывал программу и снова. Каждый раз, когда я снова запускаю программу, рендеринг виджетов становится намного медленнее Я был бы очень признателен за решение спасибо.

Витрина:

import tkinter
from datetime import datetime
from threading import Thread
from tkinter import BOTH, VERTICAL, HORIZONTAL


def __workspace_frame_resize__(event):
    canvas_for_workspace.configure(
        scrollregion=canvas_for_workspace.bbox("all"))

def render():
    start = datetime.now()
    for i in range(0, 2000):
        lbl = tkinter.Label(workspace, text="Test " + str(i))
        lbl.pack(side=tkinter.TOP, expand=True, fill=tkinter.X)
    end = datetime.now()
    print("Rendered in "+str(end-start)+"s")

def create_scroll_bar(orient, command, window=None):
    if window is None:
        scrollbar = tkinter.Scrollbar(root, orient=orient,
                                      command=command, background="white", cursor="hand1")
    else:
        scrollbar = tkinter.Scrollbar(window, orient=orient,
                                      command=command, background="white", cursor="hand1")
    if orient == HORIZONTAL:
        scrollbar.pack(side=tkinter.BOTTOM, fill=tkinter.X)
    elif orient == VERTICAL:
        scrollbar.pack(side=tkinter.RIGHT, fill=tkinter.Y)
    else:
        Exception("BAD ORIENTATION")
    return scrollbar

root = tkinter.Tk()
canvas_for_workspace = tkinter.Canvas(root, bg="white",
                                      highlightthickness=0)
vscrollbar = create_scroll_bar(VERTICAL,
                               canvas_for_workspace.yview)
hscrollbar = create_scroll_bar(HORIZONTAL,
                               canvas_for_workspace.xview)
canvas_for_workspace.pack(side=tkinter.LEFT, fill=BOTH, expand=True)
workspace = tkinter.Frame(canvas_for_workspace, bg="white")
workspace.pack(side=tkinter.LEFT, fill=BOTH, expand=True)
workspace.bind("<Configure>", __workspace_frame_resize__)
canvas_for_workspace.configure(yscrollcommand=vscrollbar.set,
                               xscrollcommand=hscrollbar.set)
canvas_for_workspace.create_window((0, 0), window=workspace,
                                   anchor="nw")
Thread(target=render).start()
root.mainloop()
...