どん底から這い上がるまでの記録

どん底から這い上がりたいけど這い上がれない人がいろいろ書くブログ(主にプログラミング)

スクロールバーを使ってみる。

tkinterのスクロールバーを使ってみたので、そのメモ。

作ったものはこんな感じのやつ。

f:id:pytry3g:20180723211300p:plain

 

関連リンク

24.8. Methods on Text widgets

スクロールバーの作成手順

他にも方法はあると思いますが、自分が見つけたスクロールバーの作成手順はこんな感じです。

  1. Frameのオブジェクトを作る。
  2. スクロールバーを作ってFrameに配置する。
  3. スクロールバーを設置したいwidgetを作ってFrameに配置する。

作成手順に従って、プログラムを書いていきます。

プログラムを書く

今回作ったものは以下のような手順で作られています。()の中身は変数名です。

  1. メインウィンドウ(root)を用意する。
  2. メインフレームmainFrame)を作ってメインウィンドウ(root)に配置。
  3. テキストボックスを入れるためのフレーム(textFrame)を用意し、メインフレームmainFrame)に配置。
  4. ボタンを入れるためのフレーム(buttonFrame)を用意し、メインフレームmainFrame)に配置。
  5. スクロールバー(scrollbar)とテキストボックス(textField)を作り、(textFrame)に配置。
  6. ボタンを作る。

1. メインウィンドウを作る。

tkinterをtkとしてインポート。

import tkinter as tk

メインウィンドウの作成。

# メインウィンドウ
root = tk.Tk()
root.geometry("+{}+{}".format(200, 200))

2. メインフレームを作る。

### Frame ###
# メインフレーム
mainFrame = tk.Frame(root, width=300, height=300, bg="white")
mainFrame.pack()

メインフレームを作って、それをメインウィンドウに配置するとこんな感じになります。

f:id:pytry3g:20180723220642p:plain

widgetを入れるFrameを作る。

テキストボックスとボタンを入れるフレームをそれぞれ用意します。

2つのフレームはメインフレームに入れます。

# Text widgetを入れるためフレーム
textFrame = tk.Frame(mainFrame, width=300, height=200, bg="white")
textFrame.pack()
# Button widgetを入れるためフレーム
buttonFrame = tk.Frame(mainFrame, width=300, height=100, bg="white")
buttonFrame.pack()

f:id:pytry3g:20180723221706p:plain

スクロールバーとテキストボックスを作る

スクロールバーとテキストボックスを作ったあと、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には配置しません。

ボタンを作って配置。

### Button ###
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))

### Frame ###
# メインフレーム
mainFrame = tk.Frame(root, width=300, height=300, bg="white")
mainFrame.pack()
# Text widgetを入れるためフレーム
textFrame = tk.Frame(mainFrame, width=300, height=200, bg="white")
textFrame.pack()
# Button widgetを入れるためフレーム
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

### Button ###
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()