pythonのtkinterでメモ帳作り_改行したとき行頭にインテンドや箇条書きがあれば改行後も引き継ぐ_インテンドと数字箇条書き改修版

習慣化2_16日目

どこかで記事をまとめたいが、少しずつ進めたことをメモしていく。

tkrou.hatenablog.jp

前回作成した「改行したとき行頭にインテンドや箇条書きがあれば改行後も引き継ぐ」機能を一部改修した。

  • 箇条書きがない場合、インテンドに半角スペースがドンドン追加されてしまう不具合を修正した
  • 数字形式の箇条書き機能を追加した

作成した関数

def check_enter(self):
    # 改行したとき、もとの行のテキストを取得する
    # cursor_now = TextArea.index('insert -1lines') # ic| cursor_now: '1.0'
    pre_row_text = TextArea.get('insert -1lines', 'insert -1lines lineend')
    # re.matchで行頭の半角全角スペースタブやアスタリスクを取得
    gyoto = re.match(r'([  \t]*)([\*\+\-・])', pre_row_text) # ic| gyoto: <re.Match object; span=(0, 2), match='\t*'>
    # 取得した行頭がNoneじゃなかったら、その取得内容を改行後の先頭に挿入する
    if gyoto is not None:
        TextArea.insert('insert', gyoto.group()+" ")
        return

    # re.matchで行頭の半角全角スペースタブ+数字箇条書きを取得
    gyoto = re.match(r'([  \t]*)([0-9]{1,})\. ', pre_row_text) # ic| gyoto: <re.Match object; span=(0, 2), match='\t*'>
    # 取得した行頭がNoneじゃなかったら、その取得内容を改行後の先頭に挿入する
    if gyoto is not None:
        # 行頭のすペースを取得しておく
        gyoto_space = re.match(r'([  \t]*)', gyoto.group())
        # 取得した行頭の数字を取得して1加算する
        gyoto_count = re.search(r'([0-9]{1,})', gyoto.group())
        gyoto_count = int(gyoto_count.group())+1 # ic| gyoto_count: 2
        # その数字を改行後の先頭に追加する
        TextArea.insert('insert', gyoto_space.group()+str(gyoto_count)+". ")
        return

    # 行頭がスペース関連だけだった場合、つまり箇条書きではないがインテンドだった場合も維持する
    gyoto = re.match(r'([  \t]+)', pre_row_text) # ic| gyoto: <re.Match object; span=(0, 2), match='\t*'>
    # 取得した行頭がNoneじゃなかったら、その取得内容を改行後の先頭に挿入する
    if gyoto is not None:
        TextArea.insert('insert', gyoto.group())
  
  
# メイン内での処理
if __name__ == '__main__':
    (snip)
    root.bind("<KeyPress-Return>", check_enter)

あとやりたいこと

  • 箇条書き中に TAB や Shift+TAB でインテンドし、箇条書きの形式を変えたい * → - → + という感じ
  • 数字箇条書きのときも TAB や Shift+TAB でインテンドし、新しい1からの箇条書きになったりもとの数字に戻ったりしたい