Ich mache eine GUI in Python mit Tkinter und hatte einige Leistungsprobleme beim Packen viele Widgets auf dem Bildschirm, zum Beispiel ein 50x50 Raster von Schaltflächen packt dauert ein paar Sekunden.Tkinter Leistung beim Packen viele Widgets
Es scheint der Prozess der Zeichnung (oder Anordnung?) Der Widgets auf dem Bildschirm, die die Zeit nimmt. Ich habe versucht, sowohl den Raster- als auch den Platzgeometrie-Manager zu verwenden.
Ich frage mich, ob Multiprocessing dies beschleunigen könnte? Ich würde gerne andere Vorschläge für eine Art und Weise begrüßen, in der dies erheblich beschleunigt werden könnte.
import Tkinter as tk
root = tk.Tk()
frame = tk.Frame(root)
for i in range(50):
for j in range(50):
widget = tk.Frame(frame, bd=2, relief='raised', height=10, width=10)
widget.grid(row=i, column=j) # using place is barely quicker
tk.Button(root, text='pack', command=frame.pack).pack()
root.mainloop()
Tkinter nicht threadsicher ist, so wird Multiprozessing an Sicherheit grenzender Wahrscheinlichkeit nicht helfen, ich persönlich fand, dass in einigen Fällen, dass Sie die Widgets auf einer Leinwand platzieren [ 'canvas.create_window'] (http: //infohost.nmt. edu/tcc/help/pubs/tkinter/web/create_window.html) war schneller neu zu zeichnen, aber schwieriger zu resize/manipulieren. –
@ TadhgMcDonald-Jensen Ich habe es gerade mit dem obigen Beispiel versucht und der Unterschied ist minimal, wenn überhaupt. – Siwel
Ich meine ... Sie instanziieren 2500 Objekte, die alle instanziierte, einzigartige Schlüssel generieren, in den Tcl-Interpreter übertragen und dort instanziiert, vorwärts und rückwärts gebunden und dann arrangiert werden müssen. Soweit GUIs gehen, ist 2500 Objekte in der Regel ein wenig viel durch einen Wrapper von einer interpretierten Sprache zur anderen zu gehen. Was ist dein Ziel? Wenn du nur ein gitterähnliches Konstrukt haben willst, verwende keine 2500 Frames, benutze eine Leinwand und zeichne einige Quadrate (weniger/einfachere Objekte) – Delioth