2021/12/10(金) [n年前の日記]
#1 [python] tkinterdnd2を試用
Python + tkinter を使うと、ちょっとしたGUIアプリを作ることができるのだけど、tkinter の標準状態ではドラッグアンドロップ(DnD、D&D)を受け付ける機能が無いそうで。例えば、Windows のエクスプローラ等から tkinter のウインドウにファイルアイコンをD&Dしてもファイルパスを取得することができない。
そのあたりどうにかできないのかなとググってみたら、tkinterdnd2 というライブラリをインストールするとできるようになると知ったので、手元で少し試してみた。
環境は Windows10 x64 21H1 + Python 3.9.9 x64。
_【Python】tkinter:ファイルのドラッグアンドドロップ(パス取得、画像表示) | OFFICE54
_Eliav2/tkinterdnd2: Tkinter native drag and drop support for windows, unix and Mac OSX.
_tkinterdnd2 - PyPI
そのあたりどうにかできないのかなとググってみたら、tkinterdnd2 というライブラリをインストールするとできるようになると知ったので、手元で少し試してみた。
環境は Windows10 x64 21H1 + Python 3.9.9 x64。
_【Python】tkinter:ファイルのドラッグアンドドロップ(パス取得、画像表示) | OFFICE54
_Eliav2/tkinterdnd2: Tkinter native drag and drop support for windows, unix and Mac OSX.
_tkinterdnd2 - PyPI
◎ インストール。 :
昔は、tkinterdnd2 を使うためには、TkDND というTkの拡張パッケージを別途インストールする必要があったのだけど。
_mieki256's diary - Python + Tkinter でドラッグアンドドロップ
今現在は、tkinterdnd2 を pip でインストーするだけで使えるようになる模様。github上のファイル群を眺めたら *.dll も並んでいたので、必要な *.dll も pip で入れてくれるのだろう。
今回は tkinterdnd2 0.3.0 がインストールされた。
_mieki256's diary - Python + Tkinter でドラッグアンドドロップ
今現在は、tkinterdnd2 を pip でインストーするだけで使えるようになる模様。github上のファイル群を眺めたら *.dll も並んでいたので、必要な *.dll も pip で入れてくれるのだろう。
pip install tkinterdnd2
今回は tkinterdnd2 0.3.0 がインストールされた。
◎ 動作サンプル。 :
解説記事を参考にしつつ、tk.Entry(InputBox相当、入力フィールド) にファイルをD&Dすれば、ファイルパスが入るスクリプトを書いてみた。
_02_tkintrdnd2_sample2.py
エクスプローラからファイルをD&Dして、ファイルパスを取得できた。
ちなみに、巷の解説記事ではスクリプト内で .dnd_bind("<>", drop) と記述されていたけど、現行バージョンではその記述だと動かなった。.dnd_bind("<<Drop>>", drop) にしてみたら動いてくれた。
_02_tkintrdnd2_sample2.py
import tkinter as tk from tkinter import ttk from tkinterdnd2 import * def drop(event): print(event.data) text.set(event.data) root = TkinterDnD.Tk() root.geometry("640x100") root.title("Drag and drop with Entry") text = tk.StringVar() text.set("Please file drop") entry = ttk.Entry(root, textvariable=text) entry.pack(expand=True, fill=tk.X, padx=16, pady=8) entry.drop_target_register(DND_FILES) entry.dnd_bind("<<Drop>>", drop) root.mainloop()
エクスプローラからファイルをD&Dして、ファイルパスを取得できた。
ちなみに、巷の解説記事ではスクリプト内で .dnd_bind("<>", drop) と記述されていたけど、現行バージョンではその記述だと動かなった。.dnd_bind("<<Drop>>", drop) にしてみたら動いてくれた。
◎ windnd を試用。 :
ググっていたら、windnd というライブラリをインストールすることでもD&Dが使えるようになると知った。
_windnd - PyPI
_cilame/windnd
_Arrastrar y soltar archivo de implementacion de Python + tkinter
github上のソースを眺めてみたけれど、Windows API を使ってD&Dを使えるようにしているっぽい。tkinterdnd2 の場合は動作させるために複数の *.dll をインストールするけれど、windnd は .pyファイル一つで実現している模様。
もちろん、Windows API を使っているから Windows上でしか使えないというデメリットはあるけれど、Windows上でしか使わないスクリプトであれば問題にはならないはず。
試しにインストールしてサンプルを書いてみた。
_01_windnd_sample1.py
こちらも動いてくれた。
_windnd - PyPI
_cilame/windnd
_Arrastrar y soltar archivo de implementacion de Python + tkinter
github上のソースを眺めてみたけれど、Windows API を使ってD&Dを使えるようにしているっぽい。tkinterdnd2 の場合は動作させるために複数の *.dll をインストールするけれど、windnd は .pyファイル一つで実現している模様。
もちろん、Windows API を使っているから Windows上でしか使えないというデメリットはあるけれど、Windows上でしか使わないスクリプトであれば問題にはならないはず。
試しにインストールしてサンプルを書いてみた。
pip install windnd
_01_windnd_sample1.py
import tkinter as tk import windnd def dragged_files(files): s = ";".join((item.decode("utf-8") for item in files)) text.set(s) print(text.get()) root = tk.Tk() text = tk.StringVar() text.set("Please file drop") entry = tk.Entry(root, textvariable=text, width=80) entry.pack(expand=True, fill=tk.X, padx=16, pady=8) windnd.hook_dropfiles(root, func=dragged_files) root.mainloop()
こちらも動いてくれた。
[ ツッコむ ]
#2 [python] guizero や PySimpleGUI を少し試用
guizero という、Python用のGUIライブラリがあると知った。Python + tkinter のラッパーらしくて、記述量を減らして簡単に使えるようにしたものらしい。
_PythonとguizeroでGUIアプリケーションを手軽に作ってみる - あっきぃ日誌
_guizeroで簡単にPythonでGUI|gadgetking|note
_About - guizero
_Getting started with GUIs - Introduction | Raspberry Pi Projects
気になったので少しだけ試用。環境は Windows10 x64 21H1 + Python 3.9.9 x64。
guizero 1.2.0 がインストールされた。
チュートリアル記事を眺めながら手元で動作確認したけれど、たしかに簡単に使える印象。入力ボックスやボタンだけ並んでいれば事足りるなら、十分使えそうな気がする。学習用というか、簡単なGUIアプリ作成の入門として、結構イイ感じかもしれない。
もっとも、ウィジェットの配置等、細かくカスタマイズしようとすると、途端に厳しくなってくる印象も受けた。やはりこのあたり、簡単に使えることと、機能の豊富さは、トレードオフなのだろうな…。
_PythonとguizeroでGUIアプリケーションを手軽に作ってみる - あっきぃ日誌
_guizeroで簡単にPythonでGUI|gadgetking|note
_About - guizero
_Getting started with GUIs - Introduction | Raspberry Pi Projects
気になったので少しだけ試用。環境は Windows10 x64 21H1 + Python 3.9.9 x64。
pip install guizero
guizero 1.2.0 がインストールされた。
チュートリアル記事を眺めながら手元で動作確認したけれど、たしかに簡単に使える印象。入力ボックスやボタンだけ並んでいれば事足りるなら、十分使えそうな気がする。学習用というか、簡単なGUIアプリ作成の入門として、結構イイ感じかもしれない。
もっとも、ウィジェットの配置等、細かくカスタマイズしようとすると、途端に厳しくなってくる印象も受けた。やはりこのあたり、簡単に使えることと、機能の豊富さは、トレードオフなのだろうな…。
◎ PySimpleGUIを試用。 :
ついでに、PySimpleGUI についても軽く復習した。これも tkinter を簡単に使えるようにするためのラッパーだった気がする。
_PySimpleGUI - PyPI
_PySimpleGUI
_PySimpleGUI/readme.ja.md at master ・ PySimpleGUI/PySimpleGUI
_Cookbook - PySimpleGUI
_Tkinterを使うのであればPySimpleGUIを使ってみたらという話 - Qiita
これも pip でインストールできる。
PySimpleGUI 4.55.1 がインストールされた。
利用するメリットとしては、リストを書くだけでウィジェットのレイアウトができるあたりだろうか…。Gridレイアウトに決め打ちしてしまうことで、レイアウト作業を簡単にするという方向性なのかなと。
関連情報をググっていたら、PySimpleGUIQt なるものもあると知った。名前からして tkinter ではなく Qt のラッパーなのかな。tkinter と違って、Qt なら最初からD&Dをサポートしている、といったメリットがあるらしい。
_PySimpleGUIQt - PyPI
PySimpleGUIQt の場合、動作には PySide2 が必要と書いてあるように見える。また、import PySimpleGUI を import PySimpleGUIQt に変えるだけで基本的には動くはず、とも書いてある。そのうち試してみよう…。
_PySimpleGUI - PyPI
_PySimpleGUI
_PySimpleGUI/readme.ja.md at master ・ PySimpleGUI/PySimpleGUI
_Cookbook - PySimpleGUI
_Tkinterを使うのであればPySimpleGUIを使ってみたらという話 - Qiita
これも pip でインストールできる。
pip install PySimpleGUI
PySimpleGUI 4.55.1 がインストールされた。
利用するメリットとしては、リストを書くだけでウィジェットのレイアウトができるあたりだろうか…。Gridレイアウトに決め打ちしてしまうことで、レイアウト作業を簡単にするという方向性なのかなと。
関連情報をググっていたら、PySimpleGUIQt なるものもあると知った。名前からして tkinter ではなく Qt のラッパーなのかな。tkinter と違って、Qt なら最初からD&Dをサポートしている、といったメリットがあるらしい。
_PySimpleGUIQt - PyPI
PySimpleGUIQt の場合、動作には PySide2 が必要と書いてあるように見える。また、import PySimpleGUI を import PySimpleGUIQt に変えるだけで基本的には動くはず、とも書いてある。そのうち試してみよう…。
[ ツッコむ ]
#3 [windows] IEでWebサイトが開けない問題
某所から、メールでPCトラブル相談を受けた。Windows 8.1上で、Microsoft Edge を起動したら、その後 IE11 でWebサイトが開けなくなって、仕事で利用しているIEに特化したWebサービスが利用できなくなったとのことで。
ググってみたところ、Microsoft Edge には、IE11 でサイトを開こうとすると Microsoft Edge で開いてしまう機能があるようで…。
_IEのブラウザ起動時にMicrosoft Edgeが起動してしまう事象 - サービスをご利用のお客様へ
_IE で開いていたページが Microsoft Edge にリダイレクトされる動作について | Japan Developer Support Internet Team Blog
_IEで開きたいのにEdgeに切り替わってしまう場合 | 新着情報・セミナー・展示会情報
_「Edge にリダイレクト」しないようにするにはどうしたらよいのでしょうか - Microsoft コミュニティ
Microsoft Edge の設定を変更することで、IE11で開けるように戻せるらしい。
某所に伝えたところ、この通りに設定を変更したら解決したとのこと。良かった…。
それにしても、こんな機能を Microsoft Edge が持っていたとは知らなかった。勉強になった。
ググってみたところ、Microsoft Edge には、IE11 でサイトを開こうとすると Microsoft Edge で開いてしまう機能があるようで…。
_IEのブラウザ起動時にMicrosoft Edgeが起動してしまう事象 - サービスをご利用のお客様へ
_IE で開いていたページが Microsoft Edge にリダイレクトされる動作について | Japan Developer Support Internet Team Blog
_IEで開きたいのにEdgeに切り替わってしまう場合 | 新着情報・セミナー・展示会情報
_「Edge にリダイレクト」しないようにするにはどうしたらよいのでしょうか - Microsoft コミュニティ
Microsoft Edge の設定を変更することで、IE11で開けるように戻せるらしい。
1. Microsoft Edgeを起動します。
2. [・・・]ー[設定]メニューを開きます。
3. 「既定のブラウザー」を選択します。
4. 「Internet Explorerに Microsoft Edgeでサイトを開かせる」項目を「互換性のないサイトのみ(推奨)」もしくは「なし」に変更します。
某所に伝えたところ、この通りに設定を変更したら解決したとのこと。良かった…。
それにしても、こんな機能を Microsoft Edge が持っていたとは知らなかった。勉強になった。
[ ツッコむ ]
以上、1 日分です。