tkinterのスクロールバーを使ってみたので、そのメモ。
作ったものはこんな感じのやつ。

関連リンク
24.8. Methods on Text widgets
スクロールバーの作成手順
他にも方法はあると思いますが、自分が見つけたスクロールバーの作成手順はこんな感じです。
- Frameのオブジェクトを作る。
- スクロールバーを作ってFrameに配置する。
- スクロールバーを設置したいwidgetを作ってFrameに配置する。
作成手順に従って、プログラムを書いていきます。
プログラムを書く
今回作ったものは以下のような手順で作られています。()の中身は変数名です。
- メインウィンドウ(
root
)を用意する。
- メインフレーム(
mainFrame
)を作ってメインウィンドウ(root
)に配置。
- テキストボックスを入れるためのフレーム(
textFrame
)を用意し、メインフレーム(mainFrame
)に配置。
- ボタンを入れるためのフレーム(
buttonFrame
)を用意し、メインフレーム(mainFrame
)に配置。
- スクロールバー(
scrollbar
)とテキストボックス(textField
)を作り、(textFrame
)に配置。
- ボタンを作る。
1. メインウィンドウを作る。
tkinterをtkとしてインポート。
import tkinter as tk
メインウィンドウの作成。
root = tk.Tk()
root.geometry("+{}+{}".format(200, 200))
mainFrame = tk.Frame(root, width=300, height=300, bg="white")
mainFrame.pack()
メインフレームを作って、それをメインウィンドウに配置するとこんな感じになります。

テキストボックスとボタンを入れるフレームをそれぞれ用意します。
2つのフレームはメインフレームに入れます。
textFrame = tk.Frame(mainFrame, width=300, height=200, bg="white")
textFrame.pack()
buttonFrame = tk.Frame(mainFrame, width=300, height=100, bg="white")
buttonFrame.pack()

スクロールバーとテキストボックスを作る
スクロールバーとテキストボックスを作ったあと、textFrameに配置しています。
最後にテキストボックスの縦スクロールをスクロールバーと紐づけています。
scrollbar = tk.Scrollbar(textFrame)
scrollbar.pack(side=tk.RIGHT, fill="y")
textField = tk.Text(textFrame, width=30, height=10,
bd=5, relief="groove")
textField.pack(side=tk.LEFT, padx=(20, 0), pady=(10, 10))
textField["yscrollcommand"] = scrollbar.set
スクロールバーはtextFrame(Frameのオブジェクトに)に配置します。Text widgetには配置しません。
ボタンを作って配置。
def submit():
result = textField.get("1.0", tk.END)
print(result)
textField.delete("1.0", tk.END)
submitButton = tk.Button(buttonFrame, text="submit", command=submit)
submitButton.pack(side=tk.LEFT, padx=90, pady=(0, 20))
quitButton = tk.Button(buttonFrame, text="quit", command=root.quit)
quitButton.pack(padx=(10, 60), pady=(0, 20))
最後にmainloopでアプリケーションが動きます。
root.mainloop()
import tkinter as tk
root = tk.Tk()
root.geometry("+{}+{}".format(200, 200))
mainFrame = tk.Frame(root, width=300, height=300, bg="white")
mainFrame.pack()
textFrame = tk.Frame(mainFrame, width=300, height=200, bg="white")
textFrame.pack()
buttonFrame = tk.Frame(mainFrame, width=300, height=100, bg="white")
buttonFrame.pack()
scrollbar = tk.Scrollbar(textFrame)
scrollbar.pack(side=tk.RIGHT, fill="y")
textField = tk.Text(textFrame, width=30, height=10,
bd=5, relief="groove")
textField.pack(side=tk.LEFT, padx=(20, 0), pady=(10, 10))
textField["yscrollcommand"] = scrollbar.set
def submit():
result = textField.get("1.0", tk.END)
print(result)
textField.delete("1.0", tk.END)
submitButton = tk.Button(buttonFrame, text="submit", command=submit)
submitButton.pack(side=tk.LEFT, padx=90, pady=(0, 20))
quitButton = tk.Button(buttonFrame, text="quit", command=root.quit)
quitButton.pack(padx=(10, 60), pady=(0, 20))
root.mainloop()