2016-11-23 5 views
-2

コーディングエラーは発生しません。画像は表示されません。 Pythonの(あなたのコードを記述している)、および(Tkのユーザー・インタフェース・ツールキットをホストする)のTcl - ここに関与する2つの言語があるので画像が表示されませんか?

class StartPage(tk.Frame): 

    def __init__(self, parent, controller): 
     tk.Frame.__init__(self, parent) 
     self.controller = controller 
     image = tkinter.PhotoImage(file="NORTHERNICE (1).gif") 
     #../Documents/ 
     tkinter.Label(self, image=image).pack() 
     start = Button(self, text ="Choose a class", fg="#a1dbcd", bg="#383a39", command = lambda: controller.show_frame('PageOne'), font=("Gisha", 10)) 
     start.pack() 
+0

インデントされた定義ブロックの前のコードにStartPage(tk.Frame):が含まれています –

+0

'__init__'がクラスのコンストラクタであると仮定すると、クラス名とクラスがインスタンス化されるコードを含める必要があります。 – gus27

+0

umm私はこれをどうやってやるのだろうか?友人がこのコードで助けてくれました –

答えて

0

Tkinterのは、珍しい獣のビットです。 2つの環境間の相互作用にはいくつかの奇妙なものがあります。おそらく最も驚くべきものに遭遇しました。具体的には、実際のP​​hotoImageオブジェクト(Tcl側に完全に存在する)のライフタイムと、それに対するプロキシとして機能するPython PhotoImageオブジェクトの間の適切な同期はありません。現在、Pythonオブジェクトがガベージコレクトされている場合、Tclオブジェクトがまだ削除されていても、Tcl側でイメージが参照されている可能性があります。その結果、関数の最後には移動しないため、画像へのPython参照にローカル変数(コード内にimageなど)だけを使用することはできません。グローバル変数にイメージを格納すると動作しますが、イメージの寿命が長すぎます(イメージを使用しているウィンドウを閉じても削除されません)。これをインスタンス変数として保存すると、imageではなく、imageの代わりにself.imageとなります。Pythonインスタンスは、それが記述するTclウィジェットとまったく同じくらいの長さであると思われます。別の一般的なオプションは、イメージを使用するウィジェットの属性としてイメージを格納することです。

+0

ありがとう、それは働いた!残念ながら私はこの答えを '+1'できません –

関連する問題