見出し画像

派生版で短文対応

(Python学習初心者の試行錯誤・備忘録です)
「単語暗記アプリ」は、まあ基本機能は揃ってコードの内容も安定してきたと思います。学習に使える目途はつきました。

ここで、「派生版」として「短文暗記アプリ」も作っておこうと思います。

 かつて自分が受験生だった頃、英作文の対策で、対訳の基本例文の暗記をやりました。訳語の内容を見て、英文がスラスラ思い出せるようにする。例文が700文もあって結局全部は覚えきれなかった・・。今だと、有名どころの教材では、まずは100文とかからあるようですな。
 今度の教材は「例文」・・単語用のアプリをそのまま使うと文字数オーバーです。フォント、サイズを変更する必要があります。
・単語じゃないので辞書サイトへの接続はいらない。
・「発生」は英文を読み上げて欲しいのでCardの表(日本文)ではなくて、裏(英文)の内容を読み上げるようにしたい。

 逆に、変更点と言えばこれくらいのもので、あとはもとの単語暗記アプリのデータモデルや、ロジック、画面がほとんど、そのまま使えますね。

 オブジェクト指向での「クラスの継承」とか、自分自身はこれまでほとんど活用した経験はなかったのですけど、今まさに使えそうな気がします。

Viewの継承

単語用に作ったViewクラスを継承してView_sentenceなるクラスを作ります。イニシャライザも変更はないですね。
・変更点は makemain関数だけ。その中に書く画面設定、フォントサイズ変更。この関数をオーバーライドする。
・レイアウトで使わない辞書関連のウィジェットのコメントアウト

        #lfont = ('標楷體', 100) #大きい表示用フォント
        #sfont = ('Arial', 50) #小さい表示用フォント
        #btfont= ('Arial', 20) #ボタン表示用フォント
        lfont = ('Arial', 20) #大きい表示用フォント
        sfont = ('Arial', 20) #小さい表示用フォント
        btfont= ('Arial', 20) #ボタン表示用フォント  
(中略)
        layout = [
            [eg.Menu(menu_def)],
            [eg.Text("接続DB:"), eg.Text("dbname",font = btfont,key="-TEXT_DBNAME-")],
            [eg.Combo(values=["zh-TW","ja","en-US"],default_value="en-US",key="-LANG-"),
                eg.Text("練習下限Lv"),
                eg.Combo(values=[1,2,3],default_value=1,key="-LEVEL-", enable_events=True), 
                eg.Text("L1プール数"),
                eg.Spin(values=[i for i in range(2,21)],initial_value=5, key='-SPIN_POOL-',),
                eg.Text("デザインテーマ"),eg.Combo(values=eg.theme_list(),default_value=self.mytheme,
                                            key="-THEME-",enable_events=True),
                #eg.Text("辞書サイト"),
                #eg.Combo(values=["weblio","eijiro","goo","moe","cmoe","weblio_C"],default_value="weblio", key="-WEBDICT-")
                ],
            [eg.Canvas(key='-CANVAS-',size=(800,180))], #グラフ表示の追加
            [#eg.Button("Web辞書", font = btfont, key ="-BTN_DICT-"), 
                eg.Button("発声", font = btfont, key ="-BTN_SPEAK-"),
                eg.Button("連想", font = btfont, key ="-BTN_SHOW_BACK-"),
                eg.Button("覚えた", font = btfont, key ="-BTN_MEMORIZE-"),
                eg.Button("まだ", font = btfont, key ="-BTN_FORGET-")],
            [eg.Text('サマリー仮置き',
                key="-DISP_SUMMARY-",font=('Arial', 15))],
            [eg.Text(font = lfont, key="-DISP_MAIN-")],
            [eg.Text(font = sfont, key="-DISP_SUB-")],
        ]        
 

メインで、

myview = View_sentence()
myctrl = Controller()

として実行すると

見た目はOK。後はメインのコードの読み上げのところで

    elif event =="-BTN_SPEAK-":   #読み上げ         
        #myspeech(value["-LANG-"],myctrl.mycards.topcard["face"])
        myspeech(value["-LANG-"],myctrl.mycards.topcard["back"])

表側ではなくて、裏側を読み上げるようにしました。これで、日英対照の短文対応になりました。

This is a pen. ・・覚えた!( ´∀` )

元のコードを活かしながら、簡単に、仕様変更版を作れる「オブジェクト指向」というのは実に便利だなと実感しました。

この記事が気に入ったらサポートをしてみませんか?