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
[   ツッコむ ]
以上です。