ホームページ >バックエンド開発 >Python チュートリアル >Tkinter ラベルのグリッドにスクロールバーを追加するにはどうすればよいですか?

Tkinter ラベルのグリッドにスクロールバーを追加するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-17 15:26:10737ブラウズ

How to Add a Scrollbar to a Grid of Tkinter Labels?

Tkinter のウィジェットのグループにスクロールバーを追加する

概要

Tkinter はリストなどのウィジェットにスクロールバーを提供します、テキストボックス、キャンバス、およびエントリ。ただし、ラベル ウィジェットのグリッドをスクロールバーで表示することは、これらのウィジェットがスクロールバーをネイティブにサポートしていないため、難しい場合があります。

ソリューション

1. window_create を使用したテキスト ウィジェット:

  • window_create メソッドを使用してテキスト ウィジェットを作成し、ラベル ウィジェットを追加します。
  • このメソッドはシンプルですが、レイアウトの複雑さを制限します。

2.フレームが埋め込まれたキャンバス:

  • スクロールバーが接続されたキャンバス ウィジェットを作成します。
  • キャンバス内にフレームを埋め込み、フレーム内にラベル ウィジェットを配置します。
  • フレームの幅と高さを決定し、これらに一致するようにキャンバスのスクロール領域オプションを設定します。寸法。

3.キャンバスへの直接描画:

  • スクロールバーとキャンバスを管理するために tk.Frame から継承するカスタム クラスを作成します。
  • 埋め込まれたフレーム内にラベル ウィジェットを配置します。
  • イベントをバインドして、フレームの構成に基づいてスクロール領域を調整します

オブジェクト指向ソリューション:

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 ラベルのグリッドにスクロールバーを追加するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。