Tkinter は、ウィンドウを垂直または水平にスクロールするためのスクロールバー ウィジェットを提供します。ただし、スクロールバー インターフェイスは、リスト、テキストボックス、キャンバス、エントリなどの特定のウィジェットにのみ関連付けることができます。 window_create メソッドを使用すると、ウィジェットの単純な垂直または水平グループをテキスト ウィジェット内に配置できます。ただし、この方法には複雑なレイアウトに対する柔軟性がありません。
汎用レイアウトのより一般的な解決策は、スクロールバーが関連付けられたキャンバス ウィジェットを利用することです。次に、ウィジェットはキャンバス内に配置されるフレームに埋め込まれます。フレームの幅と高さは、キャンバスのスクロール領域に一致するように設定する必要があります。
フレームにウィジェットを埋め込むと、pack、place、または Grid メソッドを使用して配置できます。このアプローチにより、フレーム内に作成されたすべての項目をスクロールバーを使用してスクロールできるようになります。
あるいは、テキスト要素をキャンバス上に直接描画することも可能です。行の高さと座標は、フォントとレイアウトの要件に基づいて計算できます。項目に列情報をタグ付けすると、列全体の X 座標と幅を簡単に調整できます。
オブジェクトを使用したキャンバスにフレームが埋め込まれたソリューションの例を次に示します。指向のアプローチ:
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(100): tk.Label(self.frame, text="%s" % row, width=3, borderwidth="1", relief="solid").grid(row=row, column=0) t = "this is the second column for row %s" % row tk.Label(self.frame, text=t).grid(row=row, column=1) 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()
これは手続き型ソリューションです。クラスを使用しません:
import tkinter as tk def populate(frame): for row in range(100): tk.Label(frame, text="%s" % row, width=3, borderwidth="1", relief="solid").grid(row=row, column=0) t = "this is the second column for row %s" % row tk.Label(frame, text=t).grid(row=row, column=1) def onFrameConfigure(canvas): canvas.configure(scrollregion=canvas.bbox("all")) root = tk.Tk() canvas = tk.Canvas(root, borderwidth=0, background="#ffffff") frame = tk.Frame(canvas, background="#ffffff") vsb = tk.Scrollbar(root, orient="vertical", command=canvas.yview) canvas.configure(yscrollcommand=vsb.set) vsb.pack(side="right", fill="y") canvas.pack(side="left", fill="both", expand=True) canvas.create_window((4, 4), window=frame, anchor="nw") frame.bind("<Configure>", lambda event, canvas=canvas: onFrameConfigure(canvas)) populate(frame) root.mainloop()
要約すると、Tkinter のスクロールバー インターフェイスには制限がありますが、ウィジェットのグループにスクロールバーを追加するには複数の方法があります。これらのアプローチを理解することで、Tkinter ウィンドウの表示とスクロールを効果的に管理できるようになります。
以上がTkinter のウィジェットのグループにスクロールバーを追加するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。