SEワンタンの独学備忘録

IT関連の独学した内容や資格試験に対する取り組みの備忘録

【Python GUIアプリ】「すぐぐる」アプリの改良版を考えてみる


以前作ったすぐにググれるアプリに機能追加。

環境など

前回の記事と同じレベルで実装を行っています。
主要な要素は以下の通りです。
・言語:python(3.7.6)
・IDE:Spyder
・GUI実装:tkinter
・パッケージ化:pyinstaller

詳細は前回記事を参照ください。

www.wantanblog.com

アプリソース

とりあえずやりたいとこをできる実装でやっているので、きれいな感じではありません。
他にもいろいろやり方はあると思います。

こんな感じのソースをpyinstallerで実行ファイル化しました。

# Tkinterライブラリのインポート
import tkinter as tk
import tkinter.ttk as ttk
# webbrowserライブラリのインポート
import webbrowser

BROWSER_EDGE = "Microsoft Edge"
BROWSER_CHROME = "Google Chrome"
BROWSER_IE = "Internet Explorer"

SITE_G = "Google"
SITE_Y = "Youtube"
SITE_T = "Twiiter"

class app(tk.Frame):
    def callback(event):
        # テキストボックス取得
        search_word = txt.get()

        # 入力がある場合には検索する
        if search_word != "":
            # 検索サイトの選択
            search_site = combo_search.get()
            if search_site == SITE_Y:
                # YOUTUBEの検索
                url = 'https://www.youtube.com/results?search_query=' + search_word
            elif search_site == SITE_T:
                # ツイッターの検索
                url = 'https://twitter.com/search?q='+ search_word + '&src=typed_query'
            else:
                # グーグル検索(デフォルト)
                url = 'https://www.google.co.jp/search?q=' + search_word                

            # ブラウザの選択
            select_browser = combo.get()
            if select_browser == BROWSER_IE:            
                # IEで検索
                webbrowser.get('"c:\program files\internet explorer\iexplore.exe" %s &').open(url)
            elif select_browser == BROWSER_CHROME:
                # Chromeで検索
                webbrowser.get('"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" %s &').open(url)
            else:
                # Edgeで検索(デフォルト)
                webbrowser.get('"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe" %s &').open(url)
            txt.delete(0, tk.END)

def btn():
    app.callback

root = tk.Tk()
root.attributes("-topmost", True)
root.title("すぐぐる")
root.geometry("420x60")
label = tk.Label(root, text="")
label.pack()

# ブラウザ選択コンボボックスの作成
combo = ttk.Combobox(root, state='readonly')
# リストの値を設定
combo["values"] = (BROWSER_EDGE,BROWSER_IE,BROWSER_CHROME)
combo.current(0)
combo.place(x=10, y=5)

# 検索サイト選択コンボボックスの作成
combo_search = ttk.Combobox(root, state='readonly',width=12)
# リストの値を設定
combo_search["values"] = (SITE_G,SITE_Y,SITE_T)
combo_search.current(0)
combo_search.place(x=160, y=5)

# テキストボックスの作成
txt = tk.Entry(width=55)
txt.place(x=10, y=30)
    
# 検索ボタンの作成
btn = tk.Button(root, text="検索", command=btn, height=1,width=8)
btn.place(x=350, y=28)

root.bind('<Return>', app.callback)
root.mainloop()

アイコンをつけるには以下のようにコマンドオプションを添える。

pyinstaller sggr_ap.py --onefile --noconsole --icon=sggr_ap.ico

すぐぐる

使い方

アプリ本体のショートカットをデスクトップ上に作成しています。

f:id:wantanBlog:20200726190342p:plain

アプリを普通にダブルクリックすると起動します。

f:id:wantanBlog:20200726190401p:plain

検索したい条件を入力する。

①ブラウザを選択
②サイトを選択
③検索ワードを入力してエンターか検索ボタン押下

f:id:wantanBlog:20200727213417p:plain

対象ブラウザで検索が行われます。

f:id:wantanBlog:20200727213734p:plain

仕様・機能

一部は前回の記事からの再掲。

・テキストボックスは常に前面に表示される。
・対象のブラウザは以下の3種。
 Microsoft Edge(Chromium版)
 Google Chrome
 Internet Explorer
・対象のサイトは以下の3種。
 Google
 Youtube
 Twiiter
・初期表示はデフォルトでブラウザが「空欄」(マシンのデフォルトブラウザ)、検索サイトは「Google」。
・エンター押下か検索ボタン押下により検索が実行される。
ブラウザが開かれていない場合には新しいウィンドウを開く。
すでに開かれている場合は一番最近に使用したウィンドウに対して新しいタブを開く。
・検索ワードは一度検索したらテキストボックスから削除される。

検索エンジンに関しては圧倒的Google信者なのでとりあえずGoogleのみ。
他のサイトはすぐにはあまり思いつきませんでした。

不具合・未実装部分

■firefox
ブラウザについてはfirefoxも試したが他のブラウザと同様の実装方法では機能しなかったため外した。

■ブラウザのインストール環境対応
各ブラウザの実行ファイルを絶対パスで指定しているため、もしインストール構成が違った場合全く機能しない。

■Internet Explorer
YoutubeとTwiiterの検索が正常に行えない不具合がある。多分文字コード絡みが原因。

■初期表示検索機能が固定
初期表示はブラウザが「空欄」、検索サイトが「Google」で固定。
次回起動時に記録やユーザごとのデフォルト設定はできない。

■サイト設定などはできない
検索サイトはアプリに埋め込んだもの固定。
現在の実装方法だと、検索クエリーを実際に検索したURLから固定で埋め込んでいるため後から追加などはできない。
本当はここが設定できればだいぶ幅が広がるが。。。


ソースコードから修正する必要があるけど、実装方法次第で検索以外にも使えるようにはできるので自分のよく使うサイトなどをうまく組み込めたら多少は使えるようになるものかな。
どうしてもユーザビリティが低い。

・ソース

sggr_ap/sggr_ap.py at master · wantanblog/sggr_ap · GitHub

・アプリ本体

sggr_ap/sggr_ap.exe at master · wantanblog/sggr_ap · GitHub