さて、今日は Python で Tkinter を使って GUI アプリを作ってみようと思います。意外と知られていないのですが、Python でも GUI アプリを作ることができます。様々な GUI 系のライブラリがあるのですが、今日は Tkinter というライブラリを使ってみようと思います。
Tkinter とは
Tkinter は Python からGUIを構築・操作するための標準ライブラリ(ウィジェット・ツールキット)です。
作るもの
ジオコーディングをする簡単な GUI アプリです。仕様の詳細は以下を参照してください。
- 場所を入力
- 実行ボタンを押下
- ジオコーディングした結果(緯度経度)を出力
ジオコーディングは geocoder を使おうと思います。geocoder は以下のエントリーでも紹介しているので、興味があったら読んでみてください。
環境
- Windows 10
- Python 3.6.6
サンプルコード
ジオコーディングをする GUI アプリのサンプルです。
# -*- coding: utf-8 -*- from tkinter import* import geocoder root = Tk() root.geometry("300x150") root.title("ジオコーディングツール") # フレーム frame = Frame(root, width = 300, height=150, relief=SUNKEN) frame.grid() # ラベル作成 label_location = Label(frame, text="場所", font=('Meiryo' ,12, 'bold'), padx=5, pady=5) label_location.grid(row=0, column=0, sticky=E) label_lat = Label(frame, text="緯度", font=('Meiryo' ,12, 'bold'), padx=5, pady=5) label_lat.grid(row=1, column=0, sticky=E) label_lon = Label(frame, text="経度", font=('Meiryo' ,12, 'bold'), padx=5, pady=5) label_lon.grid(row=2, column=0, sticky=E) # テキストボックス作成 textbox_location = StringVar() textbox_location_entry = Entry(frame, textvariable=textbox_location, width=30) textbox_location_entry.grid(row=0, column=1) textbox_lat = StringVar() textbox_lat_entry = Entry(frame, textvariable=textbox_lat, width=30) textbox_lat_entry.configure(state='readonly') textbox_lat_entry.grid(row=1, column=1) textbox_lon = StringVar() textbox_lon_entry = Entry(frame, textvariable=textbox_lon, width=30) textbox_lon_entry.configure(state='readonly') textbox_lon_entry.grid(row=2, column=1) def exexute_geocoding(): """ジオコーディングを実行するメソッド""" # 一度テキストボックスを編集可能にする textbox_lat_entry.configure(state='normal') textbox_lon_entry.configure(state='normal') # ジオコーディング実行 location = geocoder.osm(textbox_location.get()) textbox_lat_entry.insert(END, location.latlng[0]) textbox_lon_entry.insert(END, location.latlng[1]) # テキストボックスを編集不可にする textbox_lat_entry.configure(state='readonly') textbox_lon_entry.configure(state='readonly') def exexute_clear(): # 一度テキストボックスを編集可能にする textbox_lat_entry.configure(state='normal') textbox_lon_entry.configure(state='normal') textbox_lat_entry.delete(0, END) textbox_lon_entry.delete(0, END) textbox_location_entry.delete(0, END) # テキストボックスを編集不可にする textbox_lat_entry.configure(state='readonly') textbox_lon_entry.configure(state='readonly') # ボタン作成 btn_execute = Button(frame, text='実行', command = exexute_geocoding) btn_execute.grid(row=3, column=1, sticky=E) btn_clear = Button(frame, text='クリア', command = exexute_clear) btn_clear.grid(row=3, column=2, sticky=W) root.mainloop()
こんな感じの見た目になりました。普段 Visual Studio を使っているので、アイテムの配置とかは少し面倒な印象ですね。
このように場所を入力します。
実行ボタンを押すと、このように緯度経度が出力されます。そして、クリアボタンを押すと項目がクリアされます。
まとめ
いかがでしたでしょうか?Python でもこのように GUI アプリを簡単に作成することができます。スクリプトとして実行するだけでも問題ない場合がほとんどかと思いますが、画面で入力できた方が便利な場合もあるかと思います。もし興味がある方はぜひ Tkinter を使ってみてください。本日は以上です。