Tkinterで使われるWidget変数とは?StringVarを中心に解説!?
今回はTkinterで使われるWidget変数に関して、StringVarを中心に解説いたします。Widget変数の利用方法がわからない、StringVarを上手に使いたい方へおすすめです。ぜひ最後までご覧ください。
執筆者 - おすすめの記事3選
そもそもTkinterで使われるWidget変数とは?
Tkinterで使われるWidget変数とは、Widgetの動作(ボタンのクリックや文字の入力など)に連動して、値(数値や文字列)を変更したい場合に使われる変数を意味します。
例えば、Widget変数を活用すると、値(数値や文字列)を初期化したり、Widgetの動作(ボタンのクリックや文字の入力など)に連動して、値(数値や文字列)を更新したりできます。
わかりにくい言葉がいくつか出てきましたね。。以下の「Tkinterの構成要素」を確認しながら、理解を深めましょう。
Tkinterの構成要素
Tkinterの構成要素として、Window, Frame, Widgetの概念が存在します。
名称 | 説明文 |
---|---|
Window | 画像の紫色枠の部分になります。Tkinter画面全体を表します。 |
Frame | 画像内の黄緑色枠の部分になります。Widgetが1つ以上ある場合に、取りまとめるものです。 |
Widget | 青色枠で囲まれる部分になります。1つの機能を持つ最小単位 = Widgetと考えると良いでしょう。 |
前の章でWidget変数とは、Widgetの動作(ボタンのクリックや文字の入力など)に連動して、値(数値や文字列)を変更したい場合に使われる変数とお伝えしました。
「Tkinterの構成要素」の画像内では、青色枠の値(数字や文字列)に対して、Widget変数を利用することになります。
例えば画像内で、testという値がみられますが、Widget変数を活用することで、testの初期値をhogeという値にしたり、青色枠内をクリックすると、hogeという値へ更新したりできます。
4種類のWidget変数
Widget変数の種類としては
- StringVar
- IntVar
- DoubleVar
- BooleanVar
の4種類があります。順に見ていきましょう。
StringVar
Widget変数として、文字列を扱いたい場合に利用します。以下のような書き方を行います。
1import tkinter as tk
2
3# Windowを生成する。
4# Windowについて : https://kuroro.blog/python/116yLvTkzH2AUJj8FHLx/
5root = tk.Tk()
6
7# Widget変数としてStringVarを利用する。
8# value : 初期値を設定するオプション。
9# 初期値として'test'をstringVarへ代入する。
10# value="test"を設定しない場合、初期値として''が代入される。
11stringVar = tk.StringVar(value="test")
12# set : 値を'test'から'hoge'へ書き換える。
13# 第一引数 : 設定したい文字列
14stringVar.set("hoge")
15# get : 値を取得する。printを利用すると、'hoge'が出力されます。
16stringVar.get()
IntVar
Widget変数として、整数を扱いたい場合に利用します。以下のような書き方を行います。
1import tkinter as tk
2
3# Windowを生成する。
4# Windowについて : https://kuroro.blog/python/116yLvTkzH2AUJj8FHLx/
5root = tk.Tk()
6
7# Widget変数としてIntVarを利用する。
8# value : 初期値を設定するオプション。
9# 初期値として0をintVarへ代入する。
10# value=0を設定しない場合、初期値として0が代入される。
11intVar = tk.IntVar(value=0)
12# set : 値を0から1へ書き換える。
13# 第一引数 : 設定したい整数
14intVar.set(1)
15# get : 値を取得する。printを利用すると、1が出力されます。
16intVar.get()
DoubleVar
Widget変数として、浮動小数点数を扱いたい場合に利用します。以下のような書き方を行います。
1import tkinter as tk
2
3# Windowを生成する。
4# Windowについて : https://kuroro.blog/python/116yLvTkzH2AUJj8FHLx/
5root = tk.Tk()
6
7# Widget変数としてDoubleVarを利用する。
8# value : 初期値を設定するオプション。
9# 初期値として1.1をdoubleVarへ代入する。
10# value=1.1を設定しない場合、初期値として0.0が代入される。
11doubleVar = tk.DoubleVar(value=1.1)
12# set : 値を1.1から2.2へ書き換える。
13# 第一引数 : 設定したい小数
14doubleVar.set(2.2)
15# get : 値を取得する。printを利用すると、2.2が出力されます。
16doubleVar.get()
BooleanVar
Widget変数として、Boolean値(True, False)を扱いたい場合に利用します。以下のような書き方を行います。
1import tkinter as tk
2
3# Windowを生成する。
4# Windowについて : https://kuroro.blog/python/116yLvTkzH2AUJj8FHLx/
5root = tk.Tk()
6
7# Widget変数としてBooleanVarを利用する。
8# value : 初期値を設定するオプション。
9# 初期値としてFalseをbooleanVarへ代入する。
10# value=Falseを設定しない場合、初期値としてFalseが代入される。
11booleanVar = tk.BooleanVar(value=False)
12# set : 値をFalseからTrueへ書き換える。
13# 第一引数 : 設定したいboolean値(True or false)
14booleanVar.set(True)
15# get : 値を取得する。printを利用すると、Trueが出力されます。
16booleanVar.get()
label Widgetを元に、Widget変数を活用してみる
先ほどの章では、Widget変数の種類と書き方に関して説明しました。「label Widgetを元に、Widget変数を活用してみる」の章では、label Widgetを元に、Widget変数の使い方をお伝えいたします。
今回は
- label Widgetの初期値(文字列)をtestとする。
- label Widgetをクリックした場合に、値(文字列)をhogeにする。
サンプルコードをご紹介いたします。
以下のコードをPython環境で実行すると、
1import tkinter as tk
2
3class Application(tk.Frame):
4 # label Widgetのテキストに関する情報を格納する変数
5 labelTextVariable = None
6 # label Widgetに関する情報を格納する変数
7 label = None
8
9 # label Widgetのテキスト情報を変更する関数
10 def runLabelText(self, event):
11 # get() : label Widgetのテキストを取得する。
12 # print(self.labelTextVariable.get())
13 # set() : label Widgetのテキストをhogeへ変更する。
14 self.labelTextVariable.set('hoge')
15
16 # StringVar説明用に構成される関数
17 def configForStringVar(self, frame):
18 # StringVarを利用して、label Widgetで扱うテキスト情報を文字列型変数として扱う。
19 # 初期値として、testの文字列を格納する。
20 self.labelTextVariable = tk.StringVar(value="test")
21
22 # frame Widget(Frame)を親要素として、label Widgetを作成する。
23 # textvariable : テキスト情報を表示する。値を可変なself.labelTextVariableとする。
24 # background : 背景色の設定
25 # 色について : https://kuroro.blog/python/YcZ6Yh4PswqUzaQXwnG2/
26 # width : 幅の設定
27 # height : 高さの設定
28 # Labelについて : https://kuroro.blog/python/Pj4Z7JBNRvcHZvtFqiKD/
29 self.label = tk.Label(frame, textvariable=self.labelTextVariable, background='blue', width=10, height=5)
30
31 # label Widgetをクリックした場合に、関数を実行できるようにbind関数を利用する。
32 # 第一引数 : イベント内容
33 # 第二引数 : 実行する関数
34 # bindについて : https://kuroro.blog/python/eI5ApJE1wkU7bHsuwk0H/
35 self.label.bind("<ButtonPress>", self.runLabelText)
36
37 # frame Widget(Frame)を親要素とした場合に、label Widgetをどのように配置するのか?
38 # packについて : https://kuroro.blog/python/UuvLfIBIEaw98BzBZ3FJ/
39 self.label.pack()
40
41 def __init__(self, master=None):
42 # Windowの初期設定を行う。
43 super().__init__(master)
44
45 # Windowの画面サイズを設定する。
46 # geometryについて : https://kuroro.blog/python/rozH3S2CYE0a0nB3s2QL/
47 self.master.geometry("300x200")
48
49 # Windowを親要素として、frame Widget(Frame)を作成する。
50 # Frameについて : https://kuroro.blog/python/P20XOidA5nh583fYRvxf/
51 frame = tk.Frame(self.master)
52
53 # Windowを親要素とした場合に、frame Widget(Frame)をどのように配置するのか?
54 # packについて : https://kuroro.blog/python/UuvLfIBIEaw98BzBZ3FJ/
55 frame.pack()
56
57 # StringVar説明用
58 self.configForStringVar(frame)
59
60# Tkinter初学者参考 : https://docs.python.org/ja/3/library/tkinter.html#a-simple-hello-world-program
61if __name__ == "__main__":
62 # Windowを生成する。
63 # Windowについて : https://kuroro.blog/python/116yLvTkzH2AUJj8FHLx/
64 root = tk.Tk()
65 app = Application(master=root)
66 # Windowをループさせて、継続的にWindow表示させる。
67 # mainloopについて : https://kuroro.blog/python/DmJdUb50oAhmBteRa4fi/
68 app.mainloop()
以下の画像のようにlabel Widgetを描画して、testが表示されます。
次にlabel Widget内をクリックすると、以下の画像のようにlabel Widgetを描画して、hogeが表示されます。
label Widgetに関しては、【初学者必見!?】Tkinterで使われるlabelの活用方法を徹底解説でまとめていますので、詳しく知りたい方は是非ご確認ください。
bind関数に関しては、【コード付】Tkinterで使われるbindとは?bindの仕組みを交えて解説でまとめていますので、詳しく知りたい方は是非ご確認ください。
まとめ
- Tkinterは、Window, Frame, Widgetで構成される。
- Tkinterで使われるWidget変数とは、Widgetの動作(ボタンのクリックや文字の入力など)に連動して、値(数値や文字列)を変更したい場合に使われる変数を意味します。