2017-01-25 10 views
0

私はPython(3.5)でttk/tkinterを使いこなしていますが、ボタン(特にttk.Button)に問題があります。ttk/Pythonのボタンイメージの問題

私が何を試みても、私の人生はボタンに表示される画像を得ることができません。

私は、次のコードを持っている:

from tkinter import * 
from tkinter import ttk 
from PIL import Image, ImageTk 

class Example(ttk.Frame): 
    def __init__(self, master): 
     ttk.Frame.__init__(self, master) 
     master.title('Button Test') 

     self.configure(padding='10 10 10 10') 
     self.grid(column=0, row=0, sticky=(N, E, W, S)) 

     buttonImage = Image.open('play.png') 
     buttonPhoto = ImageTk.PhotoImage(buttonImage) 

     myButton = ttk.Button(self, image=buttonPhoto, padding='10 10 10 10') 
     myButton.grid(column=1, row=1, sticky=(E, W)) 

if __name__ == "__main__": 
    root = Tk() 
    example = Example(root) 
    root.mainloop() 

これは私がherehereを見つけ、ここにStackOverflow上のユーザーからの例の合併です。

事前にアイデアや洞察をお寄せいただきありがとうございます。

+0

の終わりにNoteを参照してください。 。画像をクラス変数 'self.buttonPhoto'に割り当てます。 – furas

答えて

2

PhotoImage -Sean

は、それがローカル変数に割り当てられている場合、画像を削除garbage collectorに問題があります。

self.buttonPhoto

self.buttonPhoto = ImageTk.PhotoImage(buttonImage) 

変数クラスへ

割り当て画像:

from tkinter import * 
from tkinter import ttk 
from PIL import Image, ImageTk 

class Example(ttk.Frame): 
    def __init__(self, master): 
     ttk.Frame.__init__(self, master) 
     master.title('Button Test') 

     self.configure(padding='10 10 10 10') 
     self.grid(column=0, row=0, sticky=(N, E, W, S)) 

     buttonImage = Image.open('play.png') 

     # use self.buttonPhoto 
     self.buttonPhoto = ImageTk.PhotoImage(buttonImage) 

     # use self.buttonPhoto 
     myButton = ttk.Button(self, image=self.buttonPhoto, padding='10 10 10 10') 
     myButton.grid(column=1, row=1, sticky=(E, W)) 

if __name__ == "__main__": 
    root = Tk() 
    example = Example(root) 
    root.mainloop() 

またはその他のオブジェクトに画像を割り当てる - それはあまりにもgarbage collectorを停止する必要があります。

ie。

myButton.image = buttonPhoto 

from tkinter import * 
from tkinter import ttk 
from PIL import Image, ImageTk 

class Example(ttk.Frame): 
    def __init__(self, master): 
     ttk.Frame.__init__(self, master) 
     master.title('Button Test') 

     self.configure(padding='10 10 10 10') 
     self.grid(column=0, row=0, sticky=(N, E, W, S)) 

     buttonImage = Image.open('tplay.png') 
     buttonPhoto = ImageTk.PhotoImage(buttonImage) 

     myButton = ttk.Button(self, image=buttonPhoto, padding='10 10 10 10') 
     myButton.grid(column=1, row=1, sticky=(E, W)) 
     # assign image to other object 
     myButton.image = buttonPhoto 

if __name__ == "__main__": 
    root = Tk() 
    example = Example(root) 
    root.mainloop() 

それはローカル変数に割り当てられている場合、 `PhotoImage`は画像を削除`ゴミcollector`に問題があるページThe Tkinter PhotoImage Class

+0

それができました。非常に良い情報があり、私が引用した例の1つの一部についても説明しています。ありがとう、ふらふら。 – detroitwilly

+0

これは動作しますが、質問があります。私は多くの参照を探知しましたが、ttk.Buttonのオプション埋め込みは見つかりませんでした。それはなぜここで働くのですか?あなたはもう少し説明できますか?ありがとう。 –

関連する問題