PythonでTUIアプリを作ろう 第二部入魂編 ( その5 TUIアプリケーションの作成 )

TUI部品とLiSTDBを連動させ、TUIアプリケーションを完成させよう。


PythonでTUIアプリを作ろう(その1〜その9)で説明したPython UrwidによるTUI部品に、前回作成したデータとの連携機能を追加し、アプリケーションを完成していきます。


[1] ListDBアクセスの組み込み

ダミーデータで動かしていた部分を、ListDBにアクセスするよう変更していきます。
例えば、「PythonでTUIアプリを作ろう(その9 DialogBoxの利用)」では、テーブル一覧を下記のようなコードで実行していました。

    def get_table(self, button=None):  
        tables = u'テーブルA テーブルB テーブルC テーブルE テーブルF テーブルG テーブルH テーブルI テーブルJ テーブルK テーブルL テーブルM'.split()  
        my_select_box(self.main_loop, tables, self.common.table_name, u"Tables", self.get_table_name)  
  
    def get_table_name(self, button):  
        self.common.table_name = button.get_label()  
        self.display()  

この部分を、ListDBへのアクセスに変更します。
基本的に、get_managerManagerオブジェクトを取得し、「PythonでTUIアプリを作ろう 第二部入魂編(その2 ListDBの構造について)」内で説明した関数を呼び出すことになります。

(1) データテーブル一覧の表示と選択

先にダミーデータで実行していた「アプリケーション起動後に行うデータテーブル取得」の部分は、下記のようなコードになります。

# list.py  
from listdb.manager import get_manager  
        :  
  
    def get_table(self, ignored=None):  
        manager = get_manager(self.common.database_name, self.common.database_connect)  
        tables = manager.get_db_names()  
        tables.sort()  
        manager.close()  
        my_select_box(self.main_loop, tables, self.common.table_name, u"Tables", self.get_table_name)  
  
    def get_table_name(self, button):  
        self.common.table_name = button.get_label()  
        self.common.reset()  
        self.display()  
(2) List一覧画面

(1)で選択されたデータテーブルを、List一覧として表示する部分も示しておきます。こちらは、search_db関数を使用しています。

# listwalker.py  
from listdb.manager import get_manager  
           :  
  
    manager = get_manager(common.database_name, common.database_connect)  
    listdb = manager.search_db(common.table_name, common.category, common.search, common.from_rec, rows+1)  
    self.record_count = manager.get_record_count(common.table_name, common.category, common.search)  
    manager.close()  

このように、ダミーデータの部分を、ListDBアクセスに変更していくことで、アプリケーションを完成させていくわけです。詳細はソースコードを見てください。


[2] アプリケーションの動作

さて、なにはともあれ「百聞は一見に如かず」ですね。
完成したアプリケーションの動作を確認をしていきましょう。ここからソースコードをダウンロードし、実際に動かしてみるとわかりやすいと思います。

(1) スクリプトの起動

ダウンロードしたディレクトリ(ListDBP)に移動して、下記のコマンドを入力します。なお、pythonコマンドは実行環境に合わせてください。Python3の場合、python3になるでしょう。このスクリプトそのものは、Python2.7でも動作します。(当然ですが、Python本体とUrwidは、事前にインストールしておく必要があります。)

python list.py  
(2) データテーブル一覧の表示と選択

起動後、画面上の<T>ボタンをクリック、あるいはキーボードから’T‘を押すと、下図のようにデータテーブルの一覧が表示されるので、表示したいデータを選択します。ここでは、「ブックオフ店舗情報(東京)」を選んだとします。

(3) List一覧画面

「ブックオフ店舗情報(東京)」のList一覧が表示されます。

(4) Categoryの選択

この画面から、<C>ボタンをクリック、あるいはキーボードから’C‘を押すと、Categoryによる絞り込みができます。このデータテーブルでは、Categoryは東京二十三区になっているので、その区分の一覧が表示されます。

(5) 文字列検索

この画面から、<S>ボタンをクリック、あるいはキーボードから’S‘を押すと、文字列による絞り込みができます。

(6) Detail表示

List一覧画面からデータをEnterキー、あるいはマウスで選択すると、Detail表示画面に移行します。一応、下部のボタンによる更新処理も可能です。

(7) Google Mapsとの連携

TUI部品とは全く関係ありませんが、ちょっとした機能を付加してみました。
Field01、あるいはField02のフィールド名が’Address’あるいは’Map’の場合、上記(6)のDetail表示にリンク機能が働きます。
ここでEnterキーを叩くか、マウスでクリックするとブラウザが起動、Google Mapsに該当アドレスが表示されます。

以上が、Python UrwidによるTUIアプリケーションの概要です。簡単なアプリケーションですが、ニーズによっては役立つ分野があるかもしれません。
次回は、このListDBPの実行環境について説明しようと思います。


ソースコードについて

GitHubに登録しました。今回のコードは、ListDBPとなります。