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

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

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

HTML5の<canvas>要素用のタグです。CanvasはHTML5から導入された、二次元の図形描写が可能な要素です。

Python 3.x

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

Tkinter

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

Python

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

解決済

pythonのtkinterで、子ウインドウ上に画像が表示できない

tks_clap34
tks_clap34

総合スコア5

canvas

HTML5の<canvas>要素用のタグです。CanvasはHTML5から導入された、二次元の図形描写が可能な要素です。

Python 3.x

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

Tkinter

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

Python

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

2回答

0評価

0クリップ

161閲覧

投稿2022/05/19 13:59

編集2022/05/21 03:07

親ウインドウ上に図形を描画し、その上にマウスが置かれると子ウインドウを作成して所定の画像を表示させたいです。

【確認した事】
親ウインドウの図形上にマウスを置いた時、子ウインドウが出力
【困っている事】
子ウインドウ上に画像が表示されず、背景色に指定した真っ白なウインドウのみ表示される

画像を表示するためには、どのように修正すればよろしいでしょうか?
エラーなどがないため、修正するための手がかりも無い状態です。
不足情報がございましたら、おっしゃってください。
ご回答、よろしくお願いいたします。

※ご指摘頂きました点、修正致しました


python3.8.5

import tkinter as tk from PIL import Image, ImageTk

子ウインドウ

class ChildWindow(tk.Frame):   def __init__(self): self.root = tk.Toplevel() #修正:tk.TK() ⇒ tk.Toplevel() self.root.geometry("400x400") self.canvas= tk.Canvas(self.root, bg="white") self.canvas.pack(fill=tk.BOTH, expand=True) def disp_image(self, filename): pil_image = Image.open(filename) self.photo_image = ImageTk.PhotoImage(image=pil_image, master=self.root) self.canvas.create_image(self.canvas.winfo_width()/ 2, self.canvas.winfo_height()/ 2, image=self.photo_image)

親ウインドウ

class ParentWindow: def __init__(self): self.root = tk.Tk() self.root.geometry("400x400") self.canvas = tk.Canvas(self.root, bg="white") self.canvas.pack(fill=tk.BOTH, expand=True) self.canvas.create_oval(100, 100, 110, 110, tag="point") #図形は適当 self.canvas.tag_bind("point", "<Enter>", self.hello) self.root.mainloop() def hello(self, e): #修正:hello() ⇒ hello(self, e) self.sub_root = ChildWindow() self.sub_root.disp_image('./test.bmp') ParentWindow()

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

melian

2022/05/19 14:23

本題とは関係ないかもしれませんが、def hello(): は def hello(self, e): とするのではないでしょうか(メソッドなので)。
tks_clap34

2022/05/19 15:03

ご指摘ありがとうございます。 抜粋時に記載が漏れていましたので、追記致しました。
meg_

2022/05/19 15:40

子ウインドウのコードでエラーが出ます。
melian

2022/05/19 16:15

おそらく複数の child window を表示した場合に、最新の child window 以外の window で表示されていた画像が消えてしまう現象が発生しているのではないでしょうか? もしそうであれば、disp_image メソッド内の、 self.photo_image = ImageTk.PhotoImage(image=pil_image, master=self.root) このインスタンスを global scope へ移すことで解決するはずです。
tks_clap34

2022/05/20 17:52

meg_ 様 ⇒ インデントがおかしくなっていました。失礼いたしました
tks_clap34

2022/05/20 17:53

melian 様 ⇒ ご回答ありがとうございます。問題が2つあり、1つはご指摘頂いた点でした。        もう1つは、回答編集して展開致します。        ありがとうございました。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

canvas

HTML5の<canvas>要素用のタグです。CanvasはHTML5から導入された、二次元の図形描写が可能な要素です。

Python 3.x

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

Tkinter

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

Python

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