【Python tkinter】Scrollbar(スクロールバー)ウィジェットを作成・配置する方法
2021.01.10 /
本記事ではPythonのtkinterによるScrollbar(スクロールバー)ウィジェットの作成方法を解説していきます。
PythonによるGUIアプリケーションの作成にはtkinterが標準モジュールとして用意されています。
GUIアプリで複数の文字列から一つ選択させる場合では、スクロールバーを使用しますよね。
このスクロールバーをtkinterで表示できるようになれば、アプリ開発の幅がぐーんとアップします。
本記事を通して以下の知識を学ぶことができます。
- tkinterのスクロールバーウィジェットの使い方
- スクロールバーの作成と配置方法
- 対象ウィジェットとスクロールバーの紐づけ方法
Scrollbar(スクロールバー)ウィジェットとは
Scrollbar(スクロールバー)ウィジェットは縦方向や横方向にスクロールするために使用されるスライドコントローラーを提供します。
このスクロールバーウィジェットは以下ウィジェットに対してスクロールバーを作ることができます。
- Listbox
- Text
- Canvas
- Entry
Frameウィジェットにはスクロールバーは対応していないため注意が必要です。
例えば複数のボタンウィジェットをFrameウィジェットに配置してスクロールできるようにすることはできません。
この場合はCanvasウィジェットにFrameウィジェットを配置し、そのFrameウィジェットに対してButtonウィジェットを配置するという方法をとります。
Scrollbar(スクロールバー)の作成・配置
Scrollbar(スクロールバー)の作成手順
スクロールバーは以下の流れで作成・配置していきます。
- 対象ウィジェットを作成
- Scrollbar(スクロールバー)の作成
- Scrollbar(スクロールバー)を対象ウィジェットに反映させる
- 各ウィジェットを配置
以下で各手順について解説していきます。
各種ウィジェットの作成
スクロールバーを付けたいウィジェットを作成します。
本記事ではListbox(リストボックス)に対してスクロールバーを付けます。
import tkinter as tk
from tkinter import ttk
# rootメインウィンドウの設定
root = tk.Tk()
root.title("ttk app")
root.geometry("200x100")
# メインフレームの作成と設置
frame = ttk.Frame(root)
frame.pack(padx=20,pady=10)
# Listboxの選択肢
days = ('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday')
lists = tk.StringVar(value=days)
# 各種ウィジェットの作成
Listbox = tk.Listbox(frame, listvariable=lists, height=4)
root.mainloop()
Listboxの選択肢には7つの文字列を入れます。
Listboxは親ウィジェットframeに配置し、高さ(height)は4です。
ここでListboxには高さ(height)を指定する必要があります。高さの指定がないと、スクロールバーがうまく動かない可能性があります。
Scrollbar(スクロールバー)の作成
スクロールバーの作成にはtkinter.Scrollbarを使用します。
scrollbar = tk.Scrollbar(frame, orient=tk.VERTICAL, command=Listbox.yview)
Scrollbarの第一引数には親ウィジェットを指定し、第二引数以降はオプションを指定します。
ここではorientオプションで配置の方向VERTICAL(縦配置)を設定し、commandオプションで縦方向にスクロールyviewを設定しています。
(横方向の場合はHORIZONTAL、xviewを設定する)
Scrollbar(スクロールバー)を対象ウィジェットに反映させる
作成したスクロールバーを対象ウィジェットに反映させるには以下のように記述します。
Listbox["yscrollcommand"] = scrollbar.set
対象ウィジェットのyscrollcommand属性(横方向の場合はxscrollcommand)をScrollbarオブジェクトのsetメソッドでスクロールバーを設定しています。
これによりリストボックスとスクロールバーが紐づき、スクロールでリスト内を動かすことができるようになります。
各ウィジェットを配置
対象ウィジェットとスクロールバーの作成・紐づけが終わったら配置を行います。
Listbox.grid(row=0, column=0)
scrollbar.grid(row=0, column=1, sticky=(tk.N, tk.S))
これでリストボックスをスクロールバーでスクロールできるプログラムが完成です。
サンプルプログラム
ここまでで記述してきたプログラムの全体を以下に記します。
import tkinter as tk
from tkinter import ttk
# rootメインウィンドウの設定
root = tk.Tk()
root.title("scroll app")
root.geometry("200x100")
# メインフレームの作成と設置
frame = ttk.Frame(root)
frame.pack(padx=20,pady=10)
# Listboxの選択肢
days = ('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday')
lists = tk.StringVar(value=days)
# 各種ウィジェットの作成
Listbox = tk.Listbox(frame, listvariable=lists, height=4)
# スクロールバーの作成
scrollbar = tk.Scrollbar(frame, orient=tk.VERTICAL, command=Listbox.yview)
# スクロールバーをListboxに反映
Listbox["yscrollcommand"] = scrollbar.set
# 各種ウィジェットの設置
Listbox.grid(row=0, column=0)
scrollbar.grid(row=0, column=1, sticky=(tk.N, tk.S))
root.mainloop()
Scrollbar(スクロールバー)オプション一覧
主に使用するオプションを以下に記します。
オプション | 説明 |
---|---|
activebackground | 背景色(アクティブ時) |
bg | 背景色 |
bd | 枠線のサイズ |
cursor | マウスがホバー時のマウス種類の指定 |
orient | スクロールの方向(HORIZONTAL、VERTICAL) |
width | スクロールバーの横幅 |