今回の講座はmileをkmにする機能をpythonで作るもの。
ブログではそのままコピーせずに摂氏を華氏に変更するツールに変えた。
ウェブで動かすみたいに数値を入れてクリックすると変わるような感じ。
今まではこういう数値を出力するとかはコンソール上でしかできなかったけど、
tkinterを使うことでグラフィカルに操作できるようになる。
この見栄えのことをGUI(グラフィカルユーザーインターフェース)といい、
普段目にしているマウス、ファイルのアイコン、フォルダアイコン、アプリのアイコンとかはすべてGUI。
昔は文字だけで操作していたものを見てわかりやすく表現しているもの=GUI。
python上でそのGUIを作成・操作できるモジュールがtkinterです。
実務で使うかはわからないが…笑
tkinterの使い方を学ぶ
簡単なものであればセットアップはとても簡単。
from tkinter import *
window = Tk()
window.title("℃ to℉ converter")
#coding
window.mainloop()
tkinterをインポートして、定義して最後に.mainloop()を入れる。
これだけで#codingの部分に入れる要素を追加するだけ。
.titleで題名を設定できるけど簡単なテストくらいだったらなくても起動はできる。
tkinter()で基礎的に使うのはLabel(),Entry(),Button()。
書く型としては、
変数=ラベル(text=”表示したい要素”, オプション的な要素)
変数を配置する
これをコーディングすると
my_label = Label(text="test", font=("Futura", 15, "bold"))
my_label.grid(column=2, row=0,padx=10, pady=10)
こんな感じになる。
font=("")部分はオプション的な要素で指定ない場合はデフォルトで表示される。
配置はpack()とgrid()があり、特に配置をこだわらなくてもいい場合は全てpack()にすればいい。
grid()を使うと要素をグリッドわけで配置ができるようになり、
主にrowとcolumnを使って配置を決める。row=0, column=0 は左上になる。
padx,padyは横方向、縦方向に余白を追加できる機能でなくてもいいけどバランスを見る場合は追加する。
今回は画像を見る感じ3 x 3のグリッドなので、row・columnを使ってレイアウトしていく。
今回使う要素は
input部分 => Entry
℃部分 => Label
is qeual to 部分 => Label
86.0 部分(可変) => Label
°F部分 => Label
変換ボタン => Button
の6つ。
コーディングは
my_label = Label(text="℃", font=("Futura", 15, "bold"))
my_label.grid(column=2, row=0,padx=10, pady=10)
to_f = Label(text="is equal to", font=("Futura", 20, "bold"))
to_f.grid(column=0, row=1,padx=10, pady=10)
input_f = Label(text="0", font=("Futura", 30, "bold"))
input_f.grid(column=1, row=1,padx=10, pady=10)
num_c = Label(text="℉", font=("Futura", 20, "bold"))
num_c.grid(column=2, row=1,padx=10, pady=10)
#input
input_c = Entry(width=10)
input_c.grid(row=0, column=1,padx=10, pady=10)
#button
button = Button(text="℉ is...", command=encode)
button.grid(column=1, row=2,padx=10, pady=10)
window.mainloop()
こんな感じ。
Entryのwidthはその名の通り長さを表す。数値が多いほど長い。
buttonのcommand=は、ボタンを押すと書いた機能が動くためのもの。
この場合はencode()が機能する。
最後にそのencode()をコーディング。
#button
def encode():
temp_c = int(input_c.get())
temp_f = temp_c * 1.8 + 32
input_f.config(text=temp_f)
Entryに書かれた数字を華氏に変換する式を書いて、
input_f (86.0 部分(可変) => Label)
を書き換えるようにしています。
configはテキストとかじゃなくて文字の大きさだったり背景色だったりと色々変更ができる。
今回はテキストだけ変えるので、input_f.configでなく、input_f["text"] = temp_f
でも動く。
ソースはこちら。