tkinter
スクロールウィジェット
サーチ…
前書き
スクロールバーは、リストボックス、キャンバス、およびテキストウィジェットに追加できます。さらに、Entryウィジェットは水平方向にスクロールすることができます。他のタイプのウィジェットをスクロールできるようにするには、それらをキャンバスまたはテキストウィジェットの中に配置する必要があります。
構文
- スクロールバー= tk.Scrollbar(親、** kwargs)
パラメーター
パラメータ | 説明 |
---|---|
親 | tkinterウィジェットは階層内に存在します。ルートウィンドウを除いて、すべてのウィジェットには親があります。一部のオンラインチュートリアルでは、この「マスター」と呼ばれています。ウィジェットがpack、placeまたはgridで画面に追加されると、このウィジェットがこの親ウィジェットの内側に表示されます |
オリエント | "vertical" (デフォルト値)または"horizontal" いずれかのスクロールバーの向き |
備考
これらの例では、tkinter import tkinter as tk
(tminter)( import tkinter as tk
(3))またはimport Tkinter as tk
( import Tkinter as tk
(python 2))をimport tkinter as tk
てインポートしたと仮定しています。
テキストウィジェットへの垂直スクロールバーの接続
ウィジェットとスクロールバーの間の接続は両方向に移動します。スクロールバーは、ウィジェットと同じ高さになるように垂直方向に展開する必要があります。
text = tk.Text(parent)
text.pack(side="left")
scroll_y = tk.Scrollbar(parent, orient="vertical", command=text.yview)
scroll_y.pack(side="left", expand=True, fill="y")
text.configure(yscrollcommand=scroll_y.set)
キャンバスウィジェットを水平および垂直にスクロールする
原則はテキストウィジェットの場合と基本的に同じですが、 Grid
レイアウトを使用してウィジェットの周りにスクロールバーを配置します。
canvas = tk.Canvas(parent, width=150, height=150)
canvas.create_oval(10, 10, 20, 20, fill="red")
canvas.create_oval(200, 200, 220, 220, fill="blue")
canvas.grid(row=0, column=0)
scroll_x = tk.Scrollbar(parent, orient="horizontal", command=canvas.xview)
scroll_x.grid(row=1, column=0, sticky="ew")
scroll_y = tk.Scrollbar(parent, orient="vertical", command=canvas.yview)
scroll_y.grid(row=0, column=1, sticky="ns")
canvas.configure(yscrollcommand=scroll_y.set, xscrollcommand=scroll_x.set)
Textウィジェットとは異なり、Canvasのスクロール可能領域はコンテンツが変更されたときに自動的に更新されないため、 scrollregion
引数を使用して手動で定義して更新する必要があります。
canvas.configure(scrollregion=canvas.bbox("all"))
canvas.bbox("all")
は、キャンバス全体のコンテンツに適合する四角形の座標を返します。
ウィジェットのグループをスクロールする
ウィンドウに多数のウィジェットが含まれていると、すべてが表示されないことがあります。ただし、ウィンドウ(TkまたはToplevelインスタンス)もフレームもスクロール可能ではありません。ウィンドウの内容をスクロール可能にする1つの方法は、すべてのウィジェットをフレームに入れ、次にcreate_window
メソッドを使用してこのフレームをCanvasに埋め込むことです。
canvas = tk.Canvas(parent)
scroll_y = tk.Scrollbar(parent, orient="vertical", command=canvas.yview)
frame = tk.Frame(canvas)
# group of widgets
for i in range(20):
tk.Label(frame, text='label %i' % i).pack()
# put the frame in the canvas
canvas.create_window(0, 0, anchor='nw', window=frame)
# make sure everything is displayed before configuring the scrollregion
canvas.update_idletasks()
canvas.configure(scrollregion=canvas.bbox('all'),
yscrollcommand=scroll_y.set)
canvas.pack(fill='both', expand=True, side='left')
scroll_y.pack(fill='y', side='right')