GIS奮闘記

現役GISエンジニアの技術紹介ブログ。主にPythonを使用。

スポンサーリンク

Python で Tkinter を使って GUI アプリを作ってみよう!

さて、今日は Python で Tkinter を使って GUI アプリを作ってみようと思います。意外と知られていないのですが、Python でも GUI アプリを作ることができます。様々な GUI 系のライブラリがあるのですが、今日は Tkinter というライブラリを使ってみようと思います。

Tkinter とは

Tkinter は Python からGUIを構築・操作するための標準ライブラリ(ウィジェット・ツールキット)です。

作るもの

ジオコーディングをする簡単な GUI アプリです。仕様の詳細は以下を参照してください。

  • 場所を入力
  • 実行ボタンを押下
  • ジオコーディングした結果(緯度経度)を出力

ジオコーディングは geocoder を使おうと思います。geocoder は以下のエントリーでも紹介しているので、興味があったら読んでみてください。

www.gis-py.com

環境

  • 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 を使っているので、アイテムの配置とかは少し面倒な印象ですね。

f:id:sanvarie:20200919162620p:plain

このように場所を入力します。

f:id:sanvarie:20200919162740p:plain

実行ボタンを押すと、このように緯度経度が出力されます。そして、クリアボタンを押すと項目がクリアされます。

f:id:sanvarie:20200919162812p:plain

まとめ

いかがでしたでしょうか?Python でもこのように GUI アプリを簡単に作成することができます。スクリプトとして実行するだけでも問題ない場合がほとんどかと思いますが、画面で入力できた方が便利な場合もあるかと思います。もし興味がある方はぜひ Tkinter を使ってみてください。本日は以上です。