Python
GUI
python3
Tkinter

Tkinter を使った Python の GUI 設計

はじめに

本日, "API を叩いて郵便番号を住所に変換する" という記事を書きました.
今度はそれを使った GUI のアプリを作ってみようと思い, GUI 作成ライブラリとして有名な Tkinter に辿り着きました.

実装

実装したい機能
1. 郵便番号を画面に入力
2. 郵便番号検索 API の呼び出し
3. 返ってきた住所をそのまま出力

以下が実装したコードです.
"get_address.py" は上記の記事で用いたものを少しだけ改良したものです.

main.py
import os
import sys
import time
import tkinter as tk

import get_address as ga


def sent_value(event):
    postal_code = address_box.get('1.0', 'end')
    address = ga.getAddress(postal_code)
    display = tk.Label(text=postal_code+address)
    display.pack()


# メインウィンドウ作成
root = tk.Tk() 
root.title("Get Address")
root.geometry("480x320")

# テキストボックス
postal_code = "1250051"  # 初期設定
address_box = tk.Text(width=20, height=1)
address_box.insert(tk.END, postal_code)
address_box.pack()

# 送信ボタン
button_submit = tk.Button(text='Submit', width=16, height=1)
button_submit.bind("<Button-1>", sent_value)
button_submit.pack()

root.mainloop()
get_address.py
import urllib
import requests
import xml.etree.ElementTree as ET


def getAddress(value):
    url = 'http://zip.cgis.biz/xml/zip.php?zn='
    url = url + value
    req = urllib.request.Request(url)

    with urllib.request.urlopen(req) as response:
        xml_data = response.read()

    root = ET.fromstring(xml_data)
    es = root.findall('.//value')

    dict = {}
    for e in es:
        dict.update(e.attrib)

    return(dict['state'] + dict['city'])

実装結果は以下の通りです.
pic1.png
pic2.png

一応やりたいことはできたので満足です.
送信するごとに郵便番号と住所が下に出力されて次第に埋もれてしまうので, 表示順序かスクロールバーをつければいいかなと思いました.

参考文献

https://qiita.com/nnahito/items/ad1428a30738b3d93762