Как заставить изображения появляться после нажатия кнопок? - PullRequest
0 голосов
/ 29 апреля 2019

Я пытаюсь создать игру на память и хочу, чтобы изображения появлялись после нажатия кнопок. Поскольку код сейчас, изображения появляются сразу. Я уверен, что есть простой способ заставить изображения выглядеть так, как будто они «за» кнопками при нажатии, но так как я новичок в этом, я не могу заставить его работать. Есть ли кто-нибудь, кто мог бы дать мне совет?

from tkinter import *
from PIL import Image, ImageTk

root=Tk()

topFrame=Frame(root)
topFrame.pack()
bottomFrame=Frame(root)
bottomFrame.pack(side=BOTTOM)

def showImage(kitten):
        if kitten == 1:
                load1 = Image.open('Kittens1.GIF')
                render1 = ImageTk.PhotoImage (load1)

                img1 = Label(image=render1)
                img1.image = render1
                img1.pack()

        if kitten == 2:
                load1 = Image.open('Kittens2.GIF')
                render1 = ImageTk.PhotoImage (load1)

                img1 = Label(image=render1)
                img1.image = render1
                img1.pack()        

def kitten(button):
        if button == 1:
                picture = showImage(1)
                return picture

        if button == 2:
                picture = showImage(2)
                return picture

        if button == 3:
                picture = showImage(3)
                return picture
        if button == 4:
                picture = showImage(4)
                return picture

        if button == 5:
                picture = showImage(5)
                return picture       

        if button == 6:
                picture = showImage(6)
                return picture       

number1 = 1
number2 = 2
number3 = 3
number4 = 4
number5 = 5
number6 = 6


button1= Button(topFrame, text="button1", fg="red", command=kitten(number1))
button2= Button(topFrame, text="button2", fg="blue", command=kitten(number2))
button3= Button(topFrame, text="button3", fg="green", command=kitten(number3))
button4= Button(bottomFrame, text="button4", fg="purple", command=kitten(number4))
button5= Button(bottomFrame, text="button5", fg="orange", command=kitten(number5))
button6= Button(bottomFrame, text="button6", fg="yellow", command=kitten(number6))

#packar dem för att visa dem. För att få dem efter varandra på en rad, skriv side=LEFT. annars packas de bara uppe på varandra.
button1.pack(side=LEFT)
button2.pack(side=LEFT)
button3.pack(side=LEFT)
button4.pack(side=LEFT)
button5.pack(side=LEFT)
button6.pack(side=LEFT)


root.mainloop()

1 Ответ

1 голос
/ 29 апреля 2019

Когда вы создаете кнопки, функция обратного вызова сразу же запускается, если вы вызываете функцию, то есть оканчиваете имя функции круглыми скобками: command=kitten(number1).Обычно вы просто предоставляете имя функции без скобок.

Чтобы вызвать функцию с аргументами от кнопки, вы можете использовать lambda, см. Пример ниже:

button1= Button(topFrame, text="button1", fg="red", 
                command=lambda: kitten(number1))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...