Не работает кнопка tkinter и не подставляет изображение

Рейтинг: 0Ответов: 1Опубликовано: 18.04.2023

Вот код. Нужна игра которая будет вычислять две одинаковые картинки, по типу игры pexeso

from tkinter import *
import random
from tkinter import messagebox
from PIL import ImageTk, Image

win = Tk()
win.geometry("460x450")

imgmain = ImageTk.PhotoImage(Image.open("IMG_6080.jpg").resize((200,200)))

football = ImageTk.PhotoImage(Image.open("IMG_6081.webp.png").resize((200,200)))
basketball = ImageTk.PhotoImage(Image.open("IMG_6082.webp.png").resize((200,200)))
tennis = ImageTk.PhotoImage(Image.open("IMG_6088.webp.png").resize((200,200)))
rugby = ImageTk.PhotoImage(Image.open("IMG_6087.webp.png").resize((200,200)))
bigtennis = ImageTk.PhotoImage(Image.open("IMG_6085.webp.png").resize((200,200)))
voleyball = ImageTk.PhotoImage(Image.open("IMG_6084.webp.png").resize((200,200)))
beachball = ImageTk.PhotoImage(Image.open("IMG_6083.webp.png").resize((200,200)))
bowling = ImageTk.PhotoImage(Image.open("IMG_6086.webp.png").resize((200,200)))


matches = [football,football,basketball,basketball,tennis,tennis,rugby,rugby,bigtennis,bigtennis,voleyball,voleyball,beachball,beachball,bowling,bowling]
random.shuffle(matches)

frm = Frame()
frm.pack(pady=10)
my_label = Label(win, text="")
my_label.pack(pady=20)

count = 0
answer_list= []
answer_dict = {}
winner = 0

def wins():
    my_label.config(text="Congratulations! You Win!!!")
    button_list = [btn0,btn1,btn2,btn3,btn4,btn5,btn6,btn7,btn8,btn9,btn10,btn11,btn12,btn13,btn14,btn15]
    for button in button_list:
        button.config(bg="yellow")

def button_click(b, number):
    global count,answer_list,answer_dict
    if b["image"] == 'imgmain' and count < 2:
        b['image'] = matches[number]
        answer_list.append(number)
        answer_dict[b] = matches[number]
        count+=1 
    if len(answer_list) == 2:
        if matches[answer_list[0]] == matches[answer_list[1]]:
            my_label.config(text='MATCH!')
            for key in answer_dict:
                key['state'] = 'disabled'
            count = 0 
            answer_dict = {}
            answer_list = []
            winner += 1
            if winner == 6:
                wins()    
        else:
            my_label.config(text='NOOO!')
            count = 0
            answer_list = []
            messagebox.showinfo("Incorrect!", "Incorrect")
            for key in answer_dict:
                key["text"] = " "
            answer_dict = {}   


btn0 = Button(master = frm, height = 100, width = 100 ,image = imgmain, command= lambda:button_click(btn0, 0))
btn1 = Button(master = frm,height = 100, width = 100 , image = imgmain, command= lambda:button_click(btn1, 1))
btn2 = Button(master = frm,height = 100, width = 100 , image = imgmain, command= lambda:button_click(btn2, 2))
btn3 = Button(master = frm,height = 100, width = 100 , image = imgmain, command= lambda:button_click(btn3, 3))
btn4 = Button(master = frm,height = 100, width = 100 , image = imgmain, command= lambda:button_click(btn4, 4))
btn5 = Button(master = frm,height = 100, width = 100 , image = imgmain, command= lambda:button_click(btn5, 5))
btn6 = Button(master = frm,height = 100, width = 100 , image = imgmain, command= lambda:button_click(btn6, 6))
btn7 = Button(master = frm,height = 100, width = 100 , image = imgmain, command= lambda:button_click(btn7, 7))
btn8 = Button(master = frm,height = 100, width = 100 , image = imgmain, command= lambda:button_click(btn8, 8))
btn9 = Button(master = frm,height = 100, width = 100 , image = imgmain, command= lambda:button_click(btn9, 9))
btn10 = Button(master = frm,height = 100, width = 100 , image = imgmain, command= lambda:button_click(btn10, 10))
btn11 = Button(master = frm,height = 100, width = 100 , image = imgmain, command= lambda:button_click(btn11, 11))
btn12 = Button(master = frm,height = 100, width = 100 , image = imgmain, command= lambda:button_click(btn12, 12))
btn13 = Button(master = frm,height = 100, width = 100 , image = imgmain, command= lambda:button_click(btn13, 13))
btn14 = Button(master = frm,height = 100, width = 100 , image = imgmain, command= lambda:button_click(btn14, 14))
btn15 = Button(master = frm,height = 100, width = 100 , image = imgmain, command= lambda:button_click(btn15, 15))

btn0.grid(row=0, column=0)
btn1.grid(row=0, column=1)
btn2.grid(row=0, column=2)
btn3.grid(row=0, column=3)

btn4.grid(row=1, column=0)
btn5.grid(row=1, column=1)
btn6.grid(row=1, column=2)
btn7.grid(row=1, column=3)

btn8.grid(row=2, column=0)
btn9.grid(row=2, column=1)
btn10.grid(row=2, column=2)
btn11.grid(row=2, column=3)

btn12.grid(row=3, column=0)
btn13.grid(row=3, column=1)
btn14.grid(row=3, column=2)
btn15.grid(row=3, column=3)

win.mainloop()

Ответы

▲ 0Принят

Для того, чтоб менялась картинка вам надо распечатать b["image"] и посмотреть какое имя дал этому изображению ткинтер. У меня - "pyimage1". Имя объекта и переменная указывающая на тот же объект отличаются в ткинтер. Еще, так как вы меняете winner в функции, её из локальной надо сделать глобальной. Еще есть ошибки, отлаживайте. И, конечно, разместите кнопки с помощью цикла, а не повторяйте похожий код 15 раз.

def button_click(b, number):
    global count,answer_list,answer_dict
    global winner
    print(b["image"])
    if b["image"] == 'pyimage1' and count < 2: