見出し画像

機能追加(3)同じ単語が続く問題への対応

(Python学習初心者の試行錯誤・備忘録です)

グラフで「見える化」すると、アプリの「間抜け」な動作が目についてきます。学習が進んで、記憶定着レベルがだいぶ上がってきたときに、たまたま一つど忘れしてしまうと

「覚えた」

「覚えた」

と同じ単語ばかり続けて出てきてしまいます。出題の優先順位は、「習熟レベルが低い順」で「タイムスタンプが古い順」
>ORDER BY level ASC, timestamp ASC
としているからです。これを避けるために、指定したレベル以上の単語だけから出題するように改造します。

 実は、そのうち、そんなこともあろうかと、カードを選ぶ関数

    def pickupcard(self, lowerlevel=0) -> None:
        self.mycards.select_topcard_where("level >= ? \
             ORDER BY level ASC, timestamp ASC ",(lowerlevel,))

で抽出時の「最低レベル」を指定できるようにしてありました。
 Viewのレイアウトに「最低レベル」の選択を追加します。

        layout = [
            [eg.Menu(menu_def)],
            [eg.Combo(values=["zh-TW","ja","en-US"],default_value="zh-TW",key="-LANG-"),
            eg.Text("次のレベル以上を練習"),
            eg.Combo(values=[0,1,2,3],default_value=0,key="-LEVEL-", enable_events=True), 
            eg.Text("デザインテーマ"),eg.Combo(values=themelist,default_value=self.mytheme,
                                        key="-THEME-",enable_events=True)],
            [eg.Canvas(key='-CANVAS-',size=(800,180))], #グラフ表示の追加
            [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(myword, font = lfont, key="-DISP_MAIN-")],
            [eg.Text(pinyin, font = sfont, key="-DISP_SUB-")],
        ]

メインのコードで、LEVELが変更された時のイベント処理を追加します。

    elif event == "-LEVEL-":
        mycontroller.pickupcard(value["-LEVEL-"])
        mycontroller.refresh_view(myview)


「次のレベル以上を練習」と言うコンボボックスでレベルを選択できます。対象が存在しないとき(たとえばすべての単語がレベル0なのに、レベル2以上を選んだ時など)はNoneと表示されます。これは、コントローラーのrefresh_view()関数の中で

    def refresh_view(self,myview):
        myview.showgraph(self.levelcount[0],self.levelcount[1],self.levelcount[2],\
                                        self.levelcount[3],self.levelcount[4])
        myview.window["-DISP_SUMMARY-"].update("レベル0:{}個 レベル1:{}個 レベル2:{}個 レベル3:{}個 合計 {}個"\
                        .format(self.levelcount[0],self.levelcount[1],self.levelcount[2],\
                                self.levelcount[3],self.levelcount[4]))
        myview.window["-TEXT_DBNAME-"].update(self.mycards.mydb)
        if self.mycards.topcard is not None:
            myview.window["-DISP_MAIN-"].update(self.mycards.topcard['face'])
            myview.window["-DISP_SUB-"].update("")
        else:
            myview.window["-DISP_MAIN-"].update("None")
            myview.window["-DISP_SUB-"].update("None")

対象カードが見つからなかったときにメイン・サブ表示部にNoneと表示するようにしたためです。

いいなと思ったら応援しよう!