読者です 読者をやめる 読者になる 読者になる

人生迷子

大学院に復帰!現在はBridge of Fashionという団体でファッション業界と他の業界を繋げる活動を定期的に行いつつ、徒然なるままに自分が思ったことをブログにまとめています。

【プロダクト紹介】初めの一歩【TkInterを用いたログインウィンドウ】

※このプロダクトは変更が加えられたため、使用方法が大幅に変わりました。 それに伴い、この記事の内容も書き換えられています。

【台風はいづこ】

こんばんは。台風が近づいてるっつーから 普段はあまり持たないふつーの傘持ってったら 一滴もふりゃーしない!

傘ってこう電車で本読む時とか本当に邪魔なんですよね。 傘のクラウドとか欲しい。降ったときに傘を取り出したい←

【これがほんとのIoT】

くだらないこと言ってないで本題へ

今回は自分がgithub上にアップしているプロダクトの紹介をしてみたいと思います。 まあプロダクトっつってもすごい簡単なものなんですが、 こういう簡単なものの積み重ねからも得ることもあるし、 とにかく誰かの役にたてばよいなーと思って紹介してみます。

今回紹介するのはこちらpythonプログラムです。

【作った背景】

元々アルバイト先でpython2.X系のプログラムを書いていたんですが、 あるときに会社が提供しているホームページの記事を自動で作成してくれるような アプリケーションの開発を頼まれまして、 記事の作成自体はmechanizeとかを使って簡単にできたんですが、 肝心のプログラム起動の部分で 依頼してきた社員さんから 「プログラムを実行する時に実行したユーザ毎のアカウントとパスワードでログインして記事作成をしてほしい」 と頼まれたわけです。 ただこういうプログラム使う人って 真っ黒の画面とか慣れてないから 標準入力でユーザ名とかパスワード入れてもらおうとしても なかなかよろしくないわけです、見栄えが笑

んでどうしようかなーと思ったときにこちらのモジュール(?)を作ってみました。 これを使えばプログラム実行時に下のようなwindowが立ち上がってユーザに入力を要求します。 ユーザが入力を完了すると 予め登録された関数に入力パラメータを渡して関数を実行してくれます。

f:id:AkeruE:20140810023457j:plain

【使い方】

以下ではgithubにもあがっているsample.pyを参考に使い方を説明します。 まずLoginFrame内にあるlogin_frameのframe_wrapperデコレータをプログラムからインポートできる適切な場所に配置してください。 よくわからん人は実行したいプログラムと同じ場所でOKです。

そしてsample.pyのようにframe_wrapperデコレータをインポートします。 今回の例ではsample_functionをframe_wrapperデコレータでラップしています。 デコレートされる関数はユーザ名とパスワードを引数として定義されている必要があります。 ですが、実際に関数を呼び出す場合には無引数で呼び出して構いません。 (今回はsample_functionとして定義しています)

ユーザ名とパスワードを引数として受け取ったsample_functionは今回はその二つを標準出力に出力するに留めていますが、 適宜この関数を編集すればホームページの認証を通るプログラムをかけたりします。

ちなみにログインウィンドウというだけあって、パスワード入力の表示はきちんと"*"で代用されるようになっています。

# -*- coding: utf-8 -*-
from __future__ import division, absolute_import, print_function, unicode_literals

from login_frame import *

@frame_wrapper
def sample_function(username, password):
    # Do something to log in
    print("Login Name: {}".format(username))
    print("Password: {}".format(password))
    return

@frame_wrapper(title="Other frame window", message="他のメッセージも指定可能")
def sample_function2(username, password):
    # Do something to log in
    print("Login Name: {}".format(username))
    print("Password: {}".format(password))
    return

def main():
    sample_function()

if __name__ == "__main__":
    main()

【オプションも充実】

このフレームをログインウィンドウ以外でも(もしかしたら)使えるかもしれないと思い、 以下のようなオプションを用意しました。

  • title: ウィンドウのタイトルを変更できる.デフォルトは"Login Window"
  • message: ウィンドウ内のメッセージを変更できる.デフォルトは"ログイン名とパスワードを入力してください。"
  • first_label: 一つ目の入力欄のラベルを変更できる.デフォルトは"ログイン名"
  • second_label: 二つ目の入力欄のラベルを変更できる.デフォルトは"パスワード"
  • visible: Falseにすると二つ目の入力文字が"*"に変更される.デフォルトはFalse

これらをきちんと設定すればログインフレーム以外にも利用は可能です。 ただパラメータ二つを入力するのってログインの時以外になかなかないですようね笑

【しょぼいとか言わない】

確かにたいした実装量ではないですし、 たいしたこともやってないんですが、 それでもこれあれば便利ー♪ってなる人も世界のどこかにはいる(かも)しれないし、 他の人たちが同じような実装をしなくて済むなーと思って githubに挙げてみました。

今回初めてデコレータ機能を駆使して少しでも使いやすいようにと工夫してみましたが、 まだまだframe_wrapperの定義で冗長な箇所が散見されます。 ぜひもっとスマートに書けると言う方はプルリクおねがいします!

【参考文献】

デコレータはこちらの記事を参考にしました! Pythonのデコレータを理解するための12Step とてもわかりやすいですね☻

普段は

初めてのPython 第3版

初めてのPython 第3版

を使用してpythonは勉強しているんですが、 デコレータの話はこちらにはあまり載っていませんでした・・・

【とりま】

こういうとりあえず挙げて見る精神大事だと最近思っております。 ニッチな需要ではありますが、もしこういう需要がある人はぜひ使ってみてください。

ちなみにwindowsmacでは動くことを確認してます。 悪しからず!