mieki256's diary



2022/04/03() [n年前の日記]

#1 [python] tkinterのCanvasについて勉強中

Python + tkinter について勉強中。

キャンバス(Canvas())のサイズ内に画像がピッタリ収まるような処理をしたいなと。以下のページが参考になった。

_【Python/tkinter】Canvasに画像を表示する | イメージングソリューション
_Pythonの文法メモ: 【Pillow】ImageOpsモジュールによる画像拡大縮小・トリミング・パディング

PIL(Pillow)に入っている ImageOps.pad() を使えば、パディングを考慮しつつ画像をリサイズすることができるらしい。手元でも試したところ、期待通りの動作をしてくれた。

super().__init__()で悩んだ。 :

Python 3.x の場合、class の def __init__() 内で、super()__init__() を呼んでも動いてくれたのだけど…。Python 2.7 で同じ記述をしてもエラーが出てしまうことに気づいた。

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

以上です。

過去ログ表示

Prev - 2022/04 - Next
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project