2024/05/26(日) [n年前の日記]
#1 [python] tkinterとtextウィジェットを勉強中
_昨日
に引き続き、Python の tkinter と textウィジェットについて勉強中。環境は Windows10 x64 22H2 + Python 3.10.10 64bit。
◎ クリップボードの操作について :
pyperclip を使って、クリップボードの内容をtextウィジェットに貼り付けようとしていたのだけど、textウィジェット内で Ctrl + C でコピーした文字列を貼り付けようとすると変な文字が挿入されて悩んでしまった。Ctrl + C → Ctrl + V なら問題無いのだけど、pyperclip.paste() でクリップボード内容を取得して、textウィジェット内に挿入しようとすると、奇妙な数文字だけが入ってしまう。
解決策についてググってたら、そもそも tkinter はクリップボードを操作する機能を持っていたと知った。
_Pythonでクリップボードとのデータのやりとりをする
_【Python GUI tkinterサンプル】クリップボード(clipboard)の値をテキストボックス(ttk.Entry)に反映する | エンジニアになりたいブログ
_【Python】tkinter 再利用しそうなコード #Python - Qiita
pyperclip を使わずに、tkinter の .clipboard_get() でクリップボード内容を取得して、textウィジェット内に挿入するようにしたら、問題無く動くようになった。
解決策についてググってたら、そもそも tkinter はクリップボードを操作する機能を持っていたと知った。
_Pythonでクリップボードとのデータのやりとりをする
_【Python GUI tkinterサンプル】クリップボード(clipboard)の値をテキストボックス(ttk.Entry)に反映する | エンジニアになりたいブログ
_【Python】tkinter 再利用しそうなコード #Python - Qiita
pyperclip を使わずに、tkinter の .clipboard_get() でクリップボード内容を取得して、textウィジェット内に挿入するようにしたら、問題無く動くようになった。
◎ 各行の背景色を変更したい :
OpenGLで使うRGB値(RGB Float, RGB [0-1])に基づいて、textウィジェット内の各行の背景色を変更したい。そんなことできるのかな…?
できるらしい。以下が参考になった。
_python3 - python tk Text ウィジットで各行の文字色を個別に指定したい。 - スタック・オーバーフロー
タグ(tag)というものが使えるらしい。
できるらしい。以下が参考になった。
_python3 - python tk Text ウィジットで各行の文字色を個別に指定したい。 - スタック・オーバーフロー
タグ(tag)というものが使えるらしい。
- 文字列を挿入する際、一緒にタグ名をつけると、そのタグの属性が反映された状態でその部分が表示される。
- タグの設定は、.tag_config("タグ名", オプション) で変更できる。
- 背景色を変更したいなら、.tag_config("タグ名", background="#9966cc") といった感じになる。
◎ 正規表現も勉強中 :
正規表現を使って、RGB Float が並んでいる部分があるかどうかを知りたい。以下のサービスを使うと、Python の正規表現の動作確認ができる。ありがたや。試しながら正規表現を求めていった。
_Pythex: a Python regular expression editor
例えば、「0.700, 0.800, 0.111」といった記述にマッチさせるなら、以下のような感じだろうか。
Python の場合、re というモジュールを import すれば正規表現が使える。以下のような感じになる。
_Pythex: a Python regular expression editor
例えば、「0.700, 0.800, 0.111」といった記述にマッチさせるなら、以下のような感じだろうか。
([01]?\.\d+)\s*,\s*([01]?\.\d+)\s*,\s*([01]?\.\d+)
Python の場合、re というモジュールを import すれば正規表現が使える。以下のような感じになる。
import re # ... m = re.search(r"([01]?\.\d+)\s*,\s*([01]?\.\d+)\s*,\s*([01]?\.\d+)", s) if m: r, g, b = m.groups()
[ ツッコむ ]
以上、1 日分です。