質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

Spyder

Spyderとは、Pythonで分析するために作られたIDEです。プログラムの編集・実行・入力補完・デバッグなどの基本的なIDE機能の他、科学用途の計算をするために要するライブラリも装備。公式・サードパーティ製のプラグインもあり、機能を拡張することもできます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

3680閲覧

pythonの画像表示について

mau

総合スコア13

Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

Spyder

Spyderとは、Pythonで分析するために作られたIDEです。プログラムの編集・実行・入力補完・デバッグなどの基本的なIDE機能の他、科学用途の計算をするために要するライブラリも装備。公式・サードパーティ製のプラグインもあり、機能を拡張することもできます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/11/30 02:25

現在python3.7を利用して画像の表示を試みています。しかし、Tkinter関係のよくわからないエラーがでてしまい困っています。どのように対処すればよろしいでしょうか?
エラーは以下の通りです。

File "C:Anaconda3\lib\tkinter_init_.py", line 2477,
in _create*(args + self._options(cnf, kw))))

TclError: image "pyimage10" doesn't exist

import os import sys from tkinter import * from PIL import ImageTk , Image root = tkinter.Tk() cv = Canvas(root , width = 600 ,height = 450) cv.pack() gazou = "WIN_20191003_15_31_28_Pro.jpg" img = Image.open(gazou) print("size={0}x{1}".format(img.width , img.height)) img_tk = ImageTk.PhotoImage(img) cv.create_image(0 , 0 , image = img_tk , anchor=NW) root.mainloop()

環境
OS:windows10pro
cpu:インテルi5-7300U
RAM:4GB

参考文献
ゼロからやさしくはじめるPython入門 マイナビ 2018/1/30

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

NemeError: name 'tkinter' is not defined とエラーが出ました。
掲載のコードと実行されたコードは同じものですか?

また、tkinter.Tk の部分を修正して実行したところ、
JPEG 画像は正常に表示されました。

掲載のコードが一部を切り出した部分である場合、
エラーが再現しない可能性があります。

変数img_tk は、このコードではグローバル変数ですが、
関数内で利用でローカル変数になると、関数終了時に破棄されるので
画像は表示されません。この場合は、エラーも表示されないので
今回のエラーとは違いますが、よくある注意点です。


TclError: image "pyimage10" doesn't exist

について、以下を試してみてください

img_tk = ImageTk.PhotoImage(img, master=root)

参考: https://stackoverflow.com/questions/38602594/how-do-i-fix-the-image-pyimage10-doesnt-exist-error-and-why-does-it-happen

個人的には、このエラーはでたことがないので、
どのような条件で発生するのか把握してませんが、
同様のエラーを master=root を指定することで解決できた報告はよく見ます。

master=root を省略すると、デフォルトのrootオブジェクトが使われます。
多くの場合は省略可能ですが、明示したほうが良い場合もあり。


他の確認点

  • 環境による問題

 win10, python3.8.3, anaconda(3.7.9) で確認

  • 画像ファイルの問題 (PILが対応してない形式のJPEGである可能性)

 → 他の jpeg 画像ファイルで試してみてください

  • ライブラリの問題

 PIL (Pillow) のインストールをどのように行ったか、等。

  • 実行環境の問題

 コマンドラインでの実行、IDEで実行した場合、等


エラーとは関係ない部分ですが、
create_image 位置指定は 0, 0 が画像の中心座標になってしまうので、

cv.create_image(img.width//2 , img.height//2 , image = img_tk , anchor=NW)

投稿2020/11/30 09:37

teamikl

総合スコア8664

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mau

2020/12/02 00:58

返信が遅くなり申し訳ございません。 とりあえず、ご指摘いただいたところを修正した結果がなんとか画像が表示されました。 img_tk = ImageTk.PhotoImage(img, master=root) とすることで画像が表示されました。 ただし、1度spyderを終了すると、 name 'tkinter' is not defined というようにtkinter自体が発見できないようになったり、 かといって、 from tkinter import * ⇩ import tkinter にしたら動き、また、終了したら NameError: name 'Canvas' is not defined というようになったりとします。 恐らくtkinter自体が何か悪さをしているのでは?思うのですが、皆目見当つかず。 少なからず判明したことは、もともと使用していた画像ファイル自体が良いものではなかったというくらいです。 いったいtkinterの何が悪いのでしょうか?
teamikl

2020/12/02 05:45

症状から見ると、実行環境の問題ではないかな。 >掲載のコードと実行されたコードは同じものですか? と質問しましたが、もしコードが同じだとすると 少なくとも、質問に掲載されてるコードでは間違いがあり from tkinter import * root = tkinter.Tk() では >name 'tkinter' is not defined と「エラーが出るのが正常な挙動」です。 tkinter モジュール内のクラスをimportしますが、 tkinter モジュール自体の名前はつくられません。 実行環境側が tkinter を提供してる等の理由により 動いてしまってる可能性があります。(※再現はできてません) root = tkinter.Tk() を root = Tk() に変更してみてください。
teamikl

2020/12/02 05:53

>import tkinter >にしたら動き、 この場合は Canvas が import されなくなるので tkinter.Canvas にする必要があります。 tkinter 特有の問題ではなく、モジュールの使い方の問題です。 詳しくは module について https://docs.python.org/ja/3/tutorial/modules.html ==== # tkinter の一般的な使い方は import tkinter as tk root = tk.Tk() canvas = tk.Canvas(root, width=600, height=450) canvas.pack() root.mainloop()
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問