TL;DR
先にTk()を実行しておこう
状況
tkinterを使ってGUIプログラムを作ろうとしていたとき、canvas上で画像を表示しようとして、書いたところエラーが出たためipythonで中身を確認しようとした。
ipython
from PIL import Image, ImageTk
import tkinter as tk
img = Image.open("hoge.png")
imgtk = ImageTk.PhotoImage(img)
すると、
RuntimeError: Too early to create image
となって先に進めなかった
原因
tk.Tk()を先に呼び出しておかないとPhotoImage()は使えない
対処
ipythonで解析しようとしていたとき、もとのスクリプトにあるtk.Tk()が反映されていなかったため、この様になった。もともと困っていたエラーは画像の方に出ていたものだから、混乱して発見が遅れた。ipython上ではroot=tk.Tk()と適当にTk()を呼んでおけば、後は問題ない。