派生版で短文対応
(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. ・・覚えた!( ´∀` )
元のコードを活かしながら、簡単に、仕様変更版を作れる「オブジェクト指向」というのは実に便利だなと実感しました。
この記事が気に入ったらサポートをしてみませんか?