【初心者向け】KivyによるWindowsアプリ作成12 ログイン失敗時のエラーメッセージ表示方法その1

今回は前回予告した通り、ログインに失敗した際にエラーメッセージを表示する方法について紹介したいと思います。

なお、今回も少し長くなりそうですので、2回に分けて記事を書いていきたいと思います。

また、例によって、コード全量はGitHubにアップしていますので、必要に応じてご参照下さい。

GitHub

<スポンサーリンク>

エラーメッセージを表示するための手順

エラーメッセージを表示するためには、ログインボタンを押したときに以下の処理をプログラムに実行させる必要があります。

①ユーザID欄とパスワード欄に入力された文字列を取得

②これら文字列を、別に保管しておいたユーザID/パスワードと照合

③照合の結果一致しない場合は、現在ブランクに設定されているLabelのtext属性を、エラーメッセージに変更(照合に成功した場合は、経費申請画面に切り替え)

今回の記事では、①について対応を進めて行きます。

①TextInputからの入力文字列取得

TextInputに入力された文字列を取得するためには、2点ほど記述を追加する必要があります。

  1. 対象のTextInputに、複数あるTextInputからそれを特定できるような識別子を記述
  2. その識別子を使って、対象のTextInputから文字列を取得

まず1つ目から実装します。

Kvファイル上のユーザID/パスワード入力欄に該当するTextInputに、以下のようにid属性を設定します。

PaddingBoxLayout:
                Label:
                    text: "ユーザID"

                TextInput:
                    id: text_userID #この行を追加

            PaddingBoxLayout:
                Label:
                    text: "パスワード"

                TextInput:
                    id: text_password #この行を追加
                    password: True

これで、ユーザIDのTextInputは「text_userID」という名前で、パスワードのTextInputは「text_password」という名前でアクセスできるようになりました。

次に、Pythonプログラム内の、ログインボタンが押された際に実行されるメソッド(loginButtonClickedメソッド)内に、入力内容を取得する記述を追加します。

class LoginScreen(Screen):
    def loginButtonClicked(self):
        userID = self.ids["text_userID"].text #この行を追加
        password = self.ids["text_password"].text #この行も追加
        sm.current = "input"

追加した行の説明をします。

肝となる部分は「self.ids[“text_userID”].text」ですが、「self」はこの記述が含まれているクラスのインスタンス、「ids[“識別子”]」はこの識別子を持つWidget、そして、「text」はこのWidgetのtext属性を示しています

つまり、「self.ids[“text_userID”].text」という表現は、

  • LoginScreenインスタンス(=self)中の
  • 識別子が「text_userID」であるWidget(今回はTextInput)の
  • textの値

を意味しています。

さらにこの値をuserIDという変数に格納する、というのが、追加した1つ目の行の内容です。

パスワードについても全く同様の形式です。

テスト実行

では、ボタンを押したときに正しくTextInputに入力された内容が取得されているか、テストしてみましょう。

と、その前に、テスト用にloginButtonClickedメソッド中に、取得した文字列を表示するためのコードを挿入しておきます。

class LoginScreen(Screen):
    def loginButtonClicked(self):
        userID = self.ids["text_userID"].text
        password = self.ids["text_password"].text
        print("ユーザIDは" + userID) #テスト用コード
        print("パスワードは" + password) #テスト用コード
        sm.current = "input"

print文を挿入することで、コンソール上に、「ユーザIDは」と「パスワードは」という日本語の後に、それぞれTextInputに入力されたユーザIDとパスワードを表示するようにしています。

この状態でプログラムを実行し、2つのTextInputに適当な文字列を入力した上でログインボタンを押してみましょう。

なお、atom-runnerを使ってプログラムを実行すると、コンソールに出力される日本語が文字化けしてしまいます。atomの設定を修正すれば正しく表示することができますが、今回はあくまでもテスト的に実行するだけですので、簡易的に行きたいと思います。

その方法ですが、Anaconda Prompt上で直接main.pyを実行するだけです。

(kivy) >python main.py

正しく値が取得できていれば、Prompt上には以下のように表示されます。

ユーザIDはaaaa
パスワードはbbbb

終わりに

今回は、PythonプログラムからWidgetの値を取得する処理の実装方法について説明しました。

次回は逆に、Pythonプログラムで生成した値をWidgetに渡してウインドウ上に表示する処理を説明し、ログインエラー発生時にウインドウ上にエラーメッセージを表示する処理を実装していきたいと思います。

<スポンサーリンク>

シェアする

フォローする