2016-08-31 3 views
0

Впервые здесь так простите меня, что это моя ПЕРВАЯ попытка сделать глупую графическую игру (если вы хотите это назвать). Я пытаюсь заставить пользователя нажать кнопку, и изображение их выбора всплывает. Я не могу понять, как получить изображение, чтобы всплывать.Tkinter - Как отображать изображение при нажатии кнопки?

Изображение показывает, будет ли я запускать его отдельно.

Мой код:

from Tkinter import * 

root = Tk() 

class PokemonClass(object): 
    def __init__(self, master): 
     frame = Frame(master) 
     frame.pack() 

     self.WelcomeLabel = Label(root, text="Welcome! Pick your Pokemon!", 
            bg="Black", fg="White") 
     self.WelcomeLabel.pack(fill=X) 

     self.CharButton = Button(root, text="Charmander", bg="RED", fg="White", 
           command=self.CharClick) 
     self.CharButton.pack(side=LEFT, fill=X) 

     self.SquirtButton = Button(root, text="Squirtle", bg="Blue", fg="White") 
     self.SquirtButton.pack(side=LEFT, fill=X) 

     self.BulbButton = Button(root, text="Bulbasaur", bg="Dark Green", 
           fg="White") 
     self.BulbButton.pack(side=LEFT, fill=X) 

    def CharClick(self): 
     print "You like Charmander!" 
     global CharSwitch 
     CharSwitch = 'Yes' 

CharSwitch = 'No' 

if CharSwitch == 'Yes': 
    CharPhoto = PhotoImage(file="Charmander.gif") 
    ChLabel = Label(root, image=CharPhoto) 
    ChLabel.pack() 

k = PokemonClass(root) 
root.mainloop() 
+0

Является ли это правильный отступ? Меня поражает, что вы не намереваетесь найти ту часть, которая сразу же запускает изображение. Он никогда не будет запущен, поскольку вы просто установите значение 'no'. Вы должны переместить этот код в обратный вызов кнопки. –

ответ

0

Это работает, но реальное изображение больше не показывает, если я держу PhotoImage из класса он будет печатать, но я хочу, чтобы распечатать ЕСЛИ они нажать определенную кнопку :

from Tkinter import * 



root = Tk() 


class PokemonClass(object): 

    def __init__(self, master): 
     frame = Frame(master) 
     frame.pack() 

     self.WelcomeLabel = Label(root, text = "Welcome! Pick your Pokemon!", bg = "Black", fg = "White") 
     self.WelcomeLabel.pack(fill = X) 

     self.CharButton = Button(root, text = "Charmander", bg = "RED", fg = "White", command = CharClick) 
     self.CharButton.pack(side = LEFT, fill = X) 

     self.SquirtButton = Button(root, text = "Squirtle", bg = "Blue", fg = "White") 
     self.SquirtButton.pack(side = LEFT, fill = X) 

     self.BulbButton = Button(root, text = "Bulbasaur", bg = "Dark Green", fg = "White") 
     self.BulbButton.pack(side = LEFT, fill = X) 

    def CharClick(): 
    print "You like Charmander!" 
    CharPhoto = PhotoImage(file = "Charmander.gif") 
    ChLabel = Label(root, image = CharPhoto) 
    ChLabel.pack() 


k = PokemonClass(root) 
root.mainloop() 
+0

Это должно быть редактирование вашего вопроса, а не ответ. Я думаю, что ваша проблема объясняется здесь http://effbot.org/pyfaq/why-do-my-tkinter-images-not-appear.htm или потенциально более современным источником http://tkinter.unpythonic.net/ вики/PhotoImage –

0

Необходимо сохранить ссылку на ваш объект PhotoImage. К сожалению, в tkinter существует несогласованность в том, что привязка Button к родительскому виджету увеличивает счетчик ссылок, но добавление изображения в виджет не увеличивает счетчик ссылок. Как следствие, в настоящий момент переменная CharPhoto выходит за пределы области действия в конце функции CharClick, номер ссылки на PhotoImage падает до нуля, и объект становится доступным для сбора мусора.

Если вы где-нибудь сохраните ссылку на изображение, оно появится. Когда вы хранили его по всему миру, он оставался в пределах всего сценария и, следовательно, появился.

Вы можете сохранить ссылку на него в объекте PokemonClass или в виджне Label.

Ниже позже из этих вариантов

from Tkinter import * 

root = Tk() 

class PokemonClass(object): 
    def __init__(self, master): 
     frame = Frame(master) 
     frame.pack() 

     self.WelcomeLabel = Label(root, text="Welcome! Pick your Pokemon!", 
            bg="Black", fg="White") 
     self.WelcomeLabel.pack(fill=X) 

     self.CharButton = Button(root, text="Charmander", bg="RED", fg="White", 
           command=self.CharClick) 
     self.CharButton.pack(side=LEFT, fill=X) 

     self.SquirtButton = Button(root, text="Squirtle", bg="Blue", fg="White") 
     self.SquirtButton.pack(side=LEFT, fill=X) 

     self.BulbButton = Button(root, text="Bulbasaur", bg="Dark Green", 
           fg="White") 
     self.BulbButton.pack(side=LEFT, fill=X) 

    def CharClick(self): 
     print "You like Charmander!" 
     global CharSwitch 
     CharSwitch = 'Yes' 
     CharPhoto = PhotoImage(file="Charmander.gif") 
     ChLabel = Label(root, image=CharPhoto) 
     ChLabel.img = CharPhoto 
     ChLabel.pack() 

CharSwitch = 'No' 

k = PokemonClass(root) 
root.mainloop() 
Смежные вопросы