2016-11-30 34 views
-1

私はtkinterの子ウィンドウに画像を取得しようとしていますが、このコードを実行するとエラーは発生しませんが、子ウィンドウにはここで私が持っているコードの一部です:イメージは私のtkinterテキストウィジェットには表示されません

from tkinter import * 
top = Tk('Outfit Randomizer') 

#gender entry 
L1 = Label(top, text = 'What is your gender? Type 1 for male and 2 for female') 
L1.grid(row = 0, column = 0) 
g = StringVar() 
E1 = Entry(top, bd = 5, textvariable = g) 
E1.grid(row = 0, column = 1) 

#submit function 
def submit(): 
    g.get() 
    gender = g.get() 
    if gender == '1': 
     root = Toplevel() 
     T = Text(root, height = 30, width = 90) 
     T.pack() 
     mhbs = random.choice([ms1, ms2]) 
     if mhbs == ms1: 
      photo = PhotoImage(file = "m.GIF") 
      label = Label(image = photo) 
      label.image = photo 
      label.pack() 
     if mhbs == ms2: 
      photo = PhotoImage(file = "m.GIF") 
      label = Label(image = photo) 
      label.image = photo 
      label.pack() 
     T.insert(END, T) 

#submit button 
MyButton1 = Button(top, text = 'Submit', width = 10, command = submit) 
MyButton1.grid(row = 3, column = 1) 

top.mainloop() 

MS1とMS2は、私は男性のシャツクラスを作成しますが、私はそれがこの質問のために不必要だと感じた私のコードの異なる部分で定義されています。私のイメージを新しいウィンドウに移すために何ができるのか教えてください!

+0

このサイトでは画像が表示されません。少なくとも100件の関連する質問があります –

+0

@BryanOakleyこのサイトも他の多くのサイトも検索しましたが、関連する質問がありますが、私のプログラムではまだ答えが見つかりません。 – sammy

+0

@sammy画像が表示されないラベルはパックされていません。エラーメッセージを見てください。あなたが他の人にあなたのコードを修正してもらいたい場合は、実際に実行して何が起こるかを見るために[mcve]を投稿してください。 – Goyo

答えて

0

少なくとも2つの問題があります。

まず、Tkのインスタンスを複数作成したり、mainloopを複数回呼び出したりしないでください。別のウィンドウが必要な場合は、Toplevelのインスタンスを作成し、mainloopをもう一度呼び出さないでください。

2つ。画像を保存するためにローカル変数を使用しているため、画像がガベージコレクションされています。あなたはLabelに親を与えることを無視しているので、詳細については、あなたはまた、ルートウィンドウではなく、あなたが作成しているToplevelのインスタンスにラベルを入れているhttp://effbot.org/pyfaq/why-do-my-tkinter-images-not-appear.htm

を参照してください。

最後に、T.insert(END, T)さんが何をすると思われるかわかりません。あなた自身にウィジェットを挿入しようとしているようです。 a)これは意味をなさない。b)テキストウィジェットにウィジェットを挿入する場合は、window_createメソッドを使用しなければならない。c)実際にテキストウィジェットに画像を挿入することが意図されている場合は、 Labelとなり、代わりにimage_createを使用できます。

+0

私はあなたが提案し変更したすべての変更を加えましたが、私はガベージコレクションされたイメージを取得し続けています!あなたが間違っている場所を確認できるかどうかを確認したい場合は、私の投稿のコードを更新しました。 – sammy

関連する問題