【python】作りながら覚えるデスクトップアプリ開発|PySimpleGUI

python

2ページ目です。

下記のような JSONファイル を読み込み、選択したURLをブラウザで開くツールを作成しましょう。

{
    "site": {
        "google": "https://www.google.com/",
        "yahoo": "https://www.yahoo.co.jp/",
        "amazon": "https://www.amazon.co.jp/",
        "rakuten": "https://item.rakuten.co.jp/"
    }
}

テキストエディタ にコピペしてファイル名を「sitelist.json」とし、jupyter Notebook の実行フォルダに「json」というサブフォルダを作成して、そこに保存してください。

JSON のデータを表示するウィンドウを作成

JSON を pyhon に読み込むと、辞書型 のデータとして扱われますが、一旦ここでは、リストを表示して、選択行を出力する GUI を作ってみます。

import PySimpleGUI as sg
import webbrowser

#このぺーじのリンク
link='https://bliss-growth.com/python_pysimplegui/'
list=['URL01','URL02','URL03','URL04']
#レイアウトの作成
layout = [
    [sg.Text('よなをブログ')],
    [sg.Text('【python】作りながら覚えるデスクトップアプリ開発')],
    [sg.Text('PySimpleGUI基礎~')],
    [sg.Multiline(link,size=(50,2), key='-URL-')],
    [sg.Submit(button_text='URLを表示')],
    [sg.Listbox(list,size=(50,5), key='-LIST-',select_mode=sg.LISTBOX_SELECT_MODE_SINGLE,enable_events=True)],
]

window = sg.Window('PySimpleGUIでGUI作成', layout)

while True:
    event, values = window.read()
    
    if event is None:
        print('exit')
        break
        
    if event == 'URLを表示':
        webbrowser.open_new(values['-URL-'])
        
    if event == '-LIST-':
        value = str(values['-LIST-'][0])
        print(value)
        
window.close()

このコードを jupyter Notebook にコピペして実行すると、以下のようなウィンドウが表示されます。

JSON ファイルの読み込みの処理を追加していきます。

import json
import os

#jsonファイルのパスを指定
json_path = os.path.join('json','sitelist.json')  #相対パス

def read_json():
    #jsonの読み込み
    with open(json_path, encoding="utf-8_sig") as f:
        json_load = json.load(f)
    print(json_load)

read_json()
# print(json_load) の結果
{'site': {'google': 'https://www.google.com/', 'yahoo': 'https://www.yahoo.co.jp/', 'amazon': 'https://www.amazon.co.jp/', 'rakuten': 'https://item.rakuten.co.jp/'}}

完成したコードとウィンドウ

読み込み処理をマージして完成したコードが以下になります。

import PySimpleGUI as sg
import webbrowser
import json
import os

#このぺーじのリンク
link='https://bliss-growth.com/python_pysimplegui/'

#jsonファイルのパスを指定
json_path = os.path.join('json','sitelist.json')  #相対パス

def read_json():
    #jsonの読み込み
    with open(json_path, encoding="utf-8_sig") as f:
        json_load = json.load(f)
    return json_load

def make_list(dic):
    sites=dic['site']
    key_list = []
    val_list = []
    for s_key,s_val in sites.items():
        key_list.append(s_val)
        val_list.append(s_val)
    return key_list,val_list

json_dict = read_json()
keys,vals = make_list(json_dict)

#レイアウトの作成
layout = [
    [sg.Text('よなをブログ')],
    [sg.Text('【python】作りながら覚えるデスクトップアプリ開発')],
    [sg.Text('PySimpleGUI基礎~')],
    [sg.Multiline(link,size=(50,2), key='-URL-')],
    [sg.Submit(button_text='URLを表示')],
    [sg.Listbox(vals,size=(50,5), key='-LIST-',select_mode=sg.LISTBOX_SELECT_MODE_SINGLE,enable_events=True)],
]

window = sg.Window('PySimpleGUIでGUI作成', layout)

while True:
    event, values = window.read()
    
    if event is None:
        print('exit')
        break
        
    if event == 'URLを表示':
        webbrowser.open_new(values['-URL-'])
        
    if event == '-LIST-':
        value = str(values['-LIST-'][0])
        webbrowser.open_new(value)
        
window.close()

実行すると以下(左図)のようなウィンドウが表示され、リストのURLを選択(右図)するとブラウザで該当のページ(この場合は Google.com)が表示されます。

JSON ファイルをいじって、よく利用するサイトを追加すると実用的になりますね。


今回はここまでです。

また次回お会いしましょう。

コメント

タイトルとURLをコピーしました