初心者でもPythonを使ってみよう

趣味と実益を兼ねたPython学習記

【スポンサーリンク】



tkinter Scaleの使い方 Python

tkinterで使用できるScaleウィジェットの使用方法を、実際に簡単なアプリを作成して確認しました。

目次

Scaleの概要

Scaleは、ユーザーがつまみを操作して値を調整するためにに使用されるウィジェットです。

以下に、向きを変えた2つのスケールを並べた画面を示します。

f:id:vigilantPotato:20190424221148p:plain

スケールのつまみ付近に数値が表示されており、つまみを動かすとそれに従って数値も変化していきます。

f:id:vigilantPotato:20190424221205p:plain

スケールで主に使用するオプションは、以下の通りです。

  • orientオプション

    スケールの向きを設定するオプション。 水平:"horizontal" (デフォルト) 垂直:"vertical"

  • showvalueオプション

    現在値の表示有無を設定するオプション。 デフォルトでTrue(表示あり)

  • variableオプション

    スケールの現在値を格納する変数を設定するオプション。 整数値の場合は「tkinter.IntVar」、小数を含む場合は「tkinter.DoubleVar」オブジェクトを使用します。上記の例では、二つのスケールのvariableオプションに同じ変数を設定したため、片方を動かして変数の値が変化すると、もう片方のスケールも一緒に動きます。

  • from_オプション、toオプション

    それぞれ、スケールの最小値と最大値を設定するオプション。

コード例

import tkinter

if __name__ == "__main__":
    root = tkinter.Tk()
    var = tkinter.IntVar(
        master=root,
        value=50
    )
    
    s1 = tkinter.Scale(
        master=root,
        orient="horizontal",
        variable=var,
        )
    s1.pack()

    s2 = tkinter.Scale(
        master=root,
        orient="vertical",
        variable=var,
        )
    s2.pack()

    root.mainloop()

次は、実際に簡単なアプリを作成しながら詳しい使い方を確認していきます。

アプリ概要

スケールの現在値をラベルに表示し、ボタンを押すとスケールの初期値に戻るアプリを作成します。

以下に、作成したアプリの外観を示します。

f:id:vigilantPotato:20190424221224p:plain

ラベル、スケール、ボタンが並べてあります。

ラベルにはスケールの現在値が表示されており、スケールのつまみを動かすとラベルの値も変化します。

f:id:vigilantPotato:20190424221238p:plain

「set_default」ボタンをクリックすると、スケールは初期値(50)に戻ります。

f:id:vigilantPotato:20190424221224p:plain

スケールの現在値の表示と、スケール値の設定を行うことができました。

コードの解説

準備

モジュールのインポートと、tkinterのトップレベルウィジェットを作成します。

今回インポートするモジュールはtkinterのみです。

import tkinter

#1.初期化用ボタンのクラス

if __name__ == "__main__":
    root = tkinter.Tk()

    #2.変数の設定
    #3.現在値表示用ラベルの設定
    #4.スケールの設定
    #5.ボタンの設定

    root.mainloop()

1.初期化用ボタンのクラス

初期化用ボタンのクラスを作成していきます。

スケールの現在値を格納するための変数を引数に取り、クリックするとその値を初期値(50)に設定するようにします。

class DefaultButton(tkinter.Button):
    def __init__(self, var, master=None):
        super().__init__(
            master=master,
            width=15,
            text="set default(50)",
            command=self.set_default,   #クリック時に実行するメソッド
            )
        self.var = var

    def set_default(self):
        self.var.set(50)    #varの値を初期値(50)に設定

2.変数の設定

スケールの現在値を格納するための変数を設定します。

変数名は「var」とし、「tkinter.Intvar」オブジェクトを使用します。このオブジェクトは、整数値のみを格納することができます。

var = tkinter.IntVar(
    master=root,
    value=50,
)

この例では、変数の生成時に「value」オプションで初期値を50に設定していますが、「.set()」メソッドを用いて後から設定することも可能です。

例:var.set(50)

3.現在値表示用ラベルの設定

スケールの現在値を表示させるためのラベルを作成します。

l = tkinter.Label(
    master=root,
    width=10,
    textvariable=var,
)
l.pack()

「textvariable」オプションに変数「var」を設定することで、スケールのつまみを動かして「var」の値が変化すると、自動的にラベルのテキストもその値に変化してくれるようになります。

4.スケールの設定

スケールを横向きで表示させ、「variable」オプションに変数「var」を設定します。

s = tkinter.Scale(
    master=root,
    orient="horizontal",
    showvalue=False,
    variable=var,
    )
s.pack()

5.ボタンの設定

最後に、「DefaultButton」クラスのオブジェクトを生成し、引数で変数「var」を渡します。

b = DefaultButton(
    master=root,
    var=var,
    )
b.pack()

コード全文

import tkinter

#初期化用ボタンのクラス
class DefaultButton(tkinter.Button):
    def __init__(self, var, master=None):
        super().__init__(
            master=master,
            width=15,
            text="set default(50)",
            command=self.set_default,
            )
        self.var = var

    def set_default(self):
        self.var.set(50)

if __name__ == "__main__":
    root = tkinter.Tk()
    
    #変数の設定
    var = tkinter.IntVar(
        master=root,
        value=50,
    )

    #現在値表示用ラベルの設定
    l = tkinter.Label(
        master=root,
        width=10,
        textvariable=var,
    )
    l.pack()

    #スケールの設定
    s = tkinter.Scale(
        master=root,
        orient="horizontal",
        showvalue=False,
        variable=var,
        )
    s.pack()

    #ボタンの設定
    b = DefaultButton(
        master=root,
        var=var,
        )
    b.pack()

    root.mainloop()