私はTkinterを使ってPythonでGUIを作っていて、多くのウィジェットを画面に詰め込むときにいくつかのパフォーマンス上の問題がありました。多くのウィジェットをパックするときのTkinterのパフォーマンス
時間がかかる画面にウィジェットを描画(または配置)するプロセスのようです。グリッドマネージャとプレースメントマネージャの両方を使ってみました。
マルチプロセッシングを使用するとスピードアップすることができますか?私はこれが大幅にスピードアップできるどんな方法についても他の提案を歓迎するでしょう。コメントで示唆したように
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にはスレッドセーフではありませんので、マルチプロセッシングは、ほぼ確実に助けにはなりません、個人的に私はいくつかのケースではそのキャンバス上のウィジェットを置く[ 'canvas.create_window'](HTTPを見つけました。 edu/tcc/help/pubs/tkinter/web/create_window.html)は、再描画が速くなりましたが、サイズ変更/操作が難しくなりました。 –
@ TadhgMcDonald-Jensen私は上記の例でこれを試しましたが、違いがあれば最小です。 – Siwel
私は、インスタンス化が必要な2500個のオブジェクトをインスタンス化しています。固有の鍵を生成し、Tclインタプリタに伝達し、そこでインスタンス化し、前後に束縛して配置します。 GUIがある限り、2500個のオブジェクトは通常、ある解釈された言語から別のものへとラッパーを通過するのに少ししかありません。あなたの目標は何ですか?あなたがグリッドのような構造をしたいのであれば、2500フレームを使用せず、キャンバスを使っていくつかの四角形を描きます(より単純で単純なオブジェクト) – Delioth