Tkinter フレームの垂直スクロールバー
複数のラベルを持つフレームに垂直スクロールバーを追加するアプローチは、通常は正しいです。ただし、考慮すべき改善点と代替方法がいくつかあります。
コードは効率的ですか?
はい、コードは目的を達成し、フレームに垂直スクロールバーを追加します。 。ただし、より効率的で洗練された代替アプローチもあります。
グリッド メソッドを使用する理由
place メソッドも機能しますが、これにはグリッド メソッドが推奨されます。構造化された予測可能な方法でウィジェットを整理できるためです。各ラベルは特定の行と列に配置でき、適切な配置と間隔を確保できます。一方、place メソッドでは、予期しない結果や重複が発生する可能性があります。
Anchor='nw' for Canvas Window
上にウィンドウを作成するときキャンバスを北西 (nw) に固定すると、ウィンドウがキャンバスの左上隅に配置されます。これはデフォルトのウィンドウ アンカーであり、キャンバスがスクロールされるときにウィンドウ内のコンテンツが確実に表示されるようにします。
代替ソリューション
ここでは、垂直方向のアンカーを使用した代替実装を示します。スクロール フレーム:
import tkinter as tk import tkinter.ttk as ttk class VerticalScrolledFrame(ttk.Frame): def __init__(self, parent, *args, **kwargs): ttk.Frame.__init__(self, parent, *args, **kwargs) self.canvas = tk.Canvas(self, bd=0, highlightthickness=0) self.canvas.pack(side=tk.LEFT, fill='both', expand=True) self.scrollbar = ttk.Scrollbar(self, orient='vertical', command=self.canvas.yview) self.scrollbar.pack(side=tk.RIGHT, fill='y') self.canvas.config(yscrollcommand=self.scrollbar.set) self.canvas.bind('<Configure>', self._configure_canvas) self.interior = ttk.Frame(self.canvas) self.interior_id = self.canvas.create_window(0, 0, window=self.interior, anchor='nw') def _configure_canvas(self, event): size = (self.interior.winfo_reqwidth(), self.interior.winfo_reqheight()) self.canvas.config(scrollregion="0 0 %s %s" % size) self.canvas.itemconfig(self.interior_id, width=self.canvas.winfo_width()) root = tk.Tk() frame = VerticalScrolledFrame(root) frame.pack(fill='both', expand=True) for i in range(50): ttk.Label(frame.interior, text=i).pack() root.mainloop()
このソリューションは、垂直スクロール フレームを作成し、キャンバスを使用してスクロールを管理します。内部フレームのサイズに自動的に調整され、スクロールされた領域内にウィジェットを簡単に配置できます。
以上が従来の方法と比較して、Tkinter フレームに垂直スクロールバーを追加するより効率的な方法はありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。