ホームページ > バックエンド開発 > Python チュートリアル > Tkinter で自動アクティブ化を使用してスクロール可能なフレームを作成するにはどうすればよいですか?

Tkinter で自動アクティブ化を使用してスクロール可能なフレームを作成するにはどうすればよいですか?

DDD
リリース: 2024-11-14 18:13:02
オリジナル
199 人が閲覧しました

How to Create a Scrollable Frame in Tkinter with Automatic Activation?

フレームの Tkinter スクロールバー

問題:

フレームの垂直スクロールバーを作成します。フレームのコンテンツが高さを超えると自動的にアクティブになり、フレーム内に複数のラベルを表示できるようになります。

実装:

スクロール可能なフレームをカプセル化するサンプル コードを次に示します。

# VerticalScrolledFrame class allows vertical scrolling within a frame
class VerticalScrolledFrame(ttk.Frame):
    def __init__(self, parent, *args, **kw):
        # Create a canvas and vertical scrollbar
        vscrollbar = ttk.Scrollbar(self, orient=VERTICAL)
        vscrollbar.pack(fill=Y, side=RIGHT, expand=FALSE)
        canvas = tk.Canvas(self, bd=0, highlightthickness=0,
                            yscrollcommand=vscrollbar.set)
        canvas.pack(side=LEFT, fill=BOTH, expand=TRUE)
        vscrollbar.config(command=canvas.yview)
        
        # Create an inner frame for content, scrollable within the canvas
        self.interior = interior = ttk.Frame(canvas)
        interior_id = canvas.create_window(0, 0, window=interior,
                                            anchor=NW)
        
        # Synchronize frame and canvas dimensions
        def _configure_interior(event):
            size = (interior.winfo_reqwidth(), interior.winfo_reqheight())
            canvas.config(scrollregion="0 0 %s %s" % size)
            if interior.winfo_reqwidth() != canvas.winfo_width():
                canvas.config(width=interior.winfo_reqwidth())
        interior.bind('<Configure>', _configure_interior)
        
        def _configure_canvas(event):
            if interior.winfo_reqwidth() != canvas.winfo_width():
                canvas.itemconfigure(interior_id, width=canvas.winfo_width())
        canvas.bind('<Configure>', _configure_canvas)
ログイン後にコピー

この実装の利点:

  • キャンバス、スクロールバー、および内部フレームをカプセル化して管理を容易にします。
  • キャンバスの寸法と内部フレームのコンテンツを自動的に同期します。
  • これにより、一貫した信頼性の高いスクロール機能が保証されます。

使用法:

# Example usage
app = tk.Tk()
my_frame = VerticalScrolledFrame(app)
my_frame.pack()
for i in range(50):
    ttk.Label(my_frame.interior, text=i).grid(row=i, column=0)  # Grid method ensures proper layout of labels
app.mainloop()
ログイン後にコピー

以上がTkinter で自動アクティブ化を使用してスクロール可能なフレームを作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート