2022/04/03(日) [n年前の日記]
#1 [python] tkinterのCanvasについて勉強中
Python + tkinter について勉強中。
キャンバス(Canvas())のサイズ内に画像がピッタリ収まるような処理をしたいなと。以下のページが参考になった。
_【Python/tkinter】Canvasに画像を表示する | イメージングソリューション
_Pythonの文法メモ: 【Pillow】ImageOpsモジュールによる画像拡大縮小・トリミング・パディング
PIL(Pillow)に入っている ImageOps.pad() を使えば、パディングを考慮しつつ画像をリサイズすることができるらしい。手元でも試したところ、期待通りの動作をしてくれた。
キャンバス(Canvas())のサイズ内に画像がピッタリ収まるような処理をしたいなと。以下のページが参考になった。
_【Python/tkinter】Canvasに画像を表示する | イメージングソリューション
_Pythonの文法メモ: 【Pillow】ImageOpsモジュールによる画像拡大縮小・トリミング・パディング
PIL(Pillow)に入っている ImageOps.pad() を使えば、パディングを考慮しつつ画像をリサイズすることができるらしい。手元でも試したところ、期待通りの動作をしてくれた。
◎ super().__init__()で悩んだ。 :
Python 3.x の場合、class の def __init__() 内で、super()__init__() を呼んでも動いてくれたのだけど…。Python 2.7 で同じ記述をしてもエラーが出てしまうことに気づいた。
ググったところ、Python 2.7 と 3.x では、このあたり仕様が変わったそうで、以下の記述に変えたら動いてくれた。
class App(tk.Frame): ではなく、class App(tk.Frame, object): のように、object も指定していることに注意。
ちなみに、super(App, self).__init__(master) ではなく、継承してるクラス名(tk.Frame)を直接記述して、tk.Frame.__init__(self, master) と書いても動作した。
_python - How to use super() when subclassing Tkinter widgets? - Stack Overflow
_Python の super() 関数の使い方 - Life with Python
class App(tk.Frame): def __init__(self, master=None): super().__init__(master) ...
ググったところ、Python 2.7 と 3.x では、このあたり仕様が変わったそうで、以下の記述に変えたら動いてくれた。
class App(tk.Frame, object): def __init__(self, master=None): try: # Python 3.x super().__init__(master) except Exception: # Python 2.7 # tk.Frame.__init__(self, master) super(App, self).__init__(master) ...
class App(tk.Frame): ではなく、class App(tk.Frame, object): のように、object も指定していることに注意。
ちなみに、super(App, self).__init__(master) ではなく、継承してるクラス名(tk.Frame)を直接記述して、tk.Frame.__init__(self, master) と書いても動作した。
_python - How to use super() when subclassing Tkinter widgets? - Stack Overflow
_Python の super() 関数の使い方 - Life with Python
[ ツッコむ ]
以上です。