やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

Pythonのtkinterでテキストエディタ風GUIを表示する

 一応できた。

成果物

バージョン確認

python3

python3 -V
Python 3.5.3

tkinter

python3 -c "import tkinter;print(tkinter.TkVersion)"
8.6

コード

touch texteditor.py
chmod 755 texteditor.py

texteditor.py

#!/usr/bin/env python3
# coding: utf-8
import os,sys
import tkinter as tk
import tkinter.font as font

root = tk.Tk()
print(font.families())
my_font = font.Font(root,family="渦筆",size="64",weight="normal") # fc-list, wight=normal|bold

edit = tk.Text(root, wrap=tk.WORD, font=my_font) # wrap=NONE|CHAR|WORD
edit.grid(column=0, row=0, sticky=(tk.N, tk.S, tk.E, tk.W))
edit.focus_set()
root.columnconfigure(0, weight=1)
root.rowconfigure(0, weight=1)

root.title("メモ帳")
#root.iconbitmap(default="*.png")
icon_path = os.path.join(os.path.dirname(os.path.abspath(sys.argv[0])),'icon.png')
imgicon = tk.PhotoImage(file=icon_path ,master=root)
root.tk.call('wm', 'iconphoto', root._w, imgicon)  
root.geometry("600x480")
root.mainloop()

結果

 実行。

./texteditor.py

 標準出力にフォント名を出力するようにした。font.Font(family="フォント名")で指定できる。

('Lato', '07にくまるフォント', 'Lato', 'Piboto', 'DejaVu Math TeX Gyre', 'OpenSymbol', 'Carlito', 'GentiumAlt', 'Linux Libertine Mono O', 'Gentium Book Basic', '怨霊', 'Lato', 'Linux Libertine Display O', 'DejaVu Sans Mono', 'YAKITORI', 'id-カナ026P', 'id-カナ014', 'Piboto', 'IPAex明朝', 'IPA明朝', 'Gentium', 'PibotoLt', 'オバケ', 'Lato', 'Linux Libertine Initials O', 'FreeSerif', 'DejaVu Sans', 'DejaVu Sans', 'VL ゴシック', 'IPAゴシック', 'DejaVu Serif', 'IPA P明朝', 'DeathOne', 'Speedsolid', 'Speed', 'DejaVu Sans', 'Lato', 'Liberation Sans Narrow', 'Liberation Mono', 'id-カナ026', 'Caladea', 'IPAexゴシック', 'VL Pゴシック', 'Linux Biolinum O', 'Minakami', 'Droid Sans Fallback', 'Lato', 'じゃぽねすく', 'Linux Biolinum Keyboard O', 'Liberation Serif', 'Speedopen', 'Linux Libertine O', 'IPA Pゴシック', 'Lato', 'Piboto', 'Liberation Sans', '渦筆', 'Piboto Condensed', 'FreeSans', 'Noto Mono', '衡山毛筆フォント行書 OTF', 'Gentium Basic', 'Lato', 'DejaVu Serif', '07ラノベPOP', 'ジンへなかな', 'FreeMono', '暗黒ゾン字', 'id-カナ014P', 'ShotaroV3', '吐き溜', 'ShotaroV3')

 指定したフォントにない字は別フォントで出しているっぽい。

f:id:ytyaru:20191003100517p:plain

残念

  • IME入力中のテキストが表示されない……
    • それの画面キャプチャが撮影できない……

f:id:ytyaru:20191003100154p:plainf:id:ytyaru:20191003100159p:plainf:id:ytyaru:20191003100203p:plain

 日本語環境では辛すぎる。テキストエディタとは呼べないレベル。

  • 検索/置換/grep置換がない
  • ハイライトできない

素敵

  • Undo/Redoできる(Ctrl+Z/Ctrl+Shift+Z
  • コピー/ペ―スト/カットできる(Ctrl+C/Ctrl+V/Ctrl+X

 最低限の機能はあるようで助かる。

所感

 以前やったときはTkinterが存在せず、Pythonのビルドからやらねばならなかった。だが、今やってみるとあっさり実行できた。おそらくRaspbianが新しくなったためだろう。でかした。

対象環境

$ uname -a
Linux raspberrypi 4.19.42-v7+ #1218 SMP Tue May 14 00:48:17 BST 2019 armv7l GNU/Linux