Python 如何跟踪按钮是否已被单击

Python 如何跟踪按钮是否已被单击,python,image,button,tkinter,Python,Image,Button,Tkinter,我正在做一个记忆游戏,我不知道如何跟踪按钮是否被点击。如果单击时两个图像不匹配,我希望平铺更改回默认图像,但如果匹配,则保留为新图像 import tkinter as tk from tkinter import ttk from tkinter import * from PIL import Image, ImageTk import random import tkinter.font from tkinter import messagebox import time class

我正在做一个记忆游戏,我不知道如何跟踪按钮是否被点击。如果单击时两个图像不匹配,我希望平铺更改回默认图像,但如果匹配,则保留为新图像

import tkinter as tk
from tkinter import ttk
from tkinter import *
from PIL import Image, ImageTk
import random
import tkinter.font
from tkinter import messagebox
import time



class MemoryBricks:
    def __init__(self, master):     
        frame=Frame(master)
        frame.grid() 
        master.title("Let's play Kitten Memory!")
        master.iconbitmap(r"default.ico")


        self.button1=ttk.Button(root)
        self.button1.grid(row = 0, column = 0)
        self.photo1 = tk.PhotoImage(file="defaultPic.png")
        self.button1.config(image=self.photo1, command=lambda: showImage(1))

        self.button2=ttk.Button(root)
        self.button2.grid(row=0, column=1)
        self.photo2 = tk.PhotoImage(file="defaultPic.png")
        self.button2.config(image=self.photo2, command=lambda: showImage(2))

        self.button3=ttk.Button(root)
        self.button3.grid(row=0, column=2)
        self.photo3 = tk.PhotoImage(file="defaultPic.png")
        self.button3.config(image=self.photo3, command=lambda: showImage(3))

        self.button4=ttk.Button(root)
        self.button4.grid(row=1, column=0)
        self.photo4 = tk.PhotoImage(file="defaultPic.png")
        self.button4.config(image=self.photo4, command=lambda: showImage(4))

        self.button5=ttk.Button(root)
        self.button5.grid(row=1, column=1)
        self.photo5 = tk.PhotoImage(file="defaultPic.png")
        self.button5.config(image=self.photo5, command=lambda: showImage(5))

        self.button6=ttk.Button(root)
        self.button6.grid(row=1, column=2)
        self.photo6 = tk.PhotoImage(file="defaultPic.png")
        self.button6.config(image=self.photo6, command=lambda: showImage(6))


        class showImage(MemoryBricks):
            def __init__(self, master):

                if master == 1:
                    load1 = Image.open('Kittens1.GIF')
                    load1Size = load1.resize((145,145))
                    render1 = ImageTk.PhotoImage (load1Size)           
                    img1 = Label(image=render1)
                    img1.image = render1 
                    img1.grid(row = 0, column = 0)



                if master == 2:
                    load1 = Image.open('Kittens2.GIF')
                    load1Size = load1.resize((145,145))
                    render1 = ImageTk.PhotoImage (load1Size)           
                    img1 = Label(image=render1)
                    img1.image = render1                
                    img1.grid(row=0, column=1)   



                if master == 3:
                    load1 = Image.open('Kittens3.GIF')
                    load1Size = load1.resize((145,145))
                    render1 = ImageTk.PhotoImage (load1Size)           
                    img1 = Label(image=render1)
                    img1.image = render1                 
                    img1.grid(row=0, column=2)  



                if master == 4:
                    load1 = Image.open('Kittens1.GIF')
                    load1Size = load1.resize((145,145))
                    render1 = ImageTk.PhotoImage (load1Size)           
                    img1 = Label(image=render1)
                    img1.image = render1                 
                    img1.grid(row=1, column=0)  



                if master == 5:
                    load1 = Image.open('Kittens2.GIF')
                    load1Size = load1.resize((145,145))
                    render1 = ImageTk.PhotoImage (load1Size)           
                    img1 = Label(image=render1)
                    img1.image = render1                 
                    img1.grid(row=1, column=1)  


                if master == 6:
                    load1 = Image.open('Kittens3.GIF')
                    load1Size = load1.resize((145,145))
                    render1 = ImageTk.PhotoImage (load1Size)           
                    img1 = Label(image=render1)
                    img1.image = render1                 
                    img1.grid(row=1, column=2)

#skapar fönstret
root=Tk()  
start_time = time.time()

#root blir master 
mem=MemoryBricks(root)

root.mainloop()


elapsed_time = time.time() - start_time

print("Your time is", elapsed_time)

我相信我可能需要创建一个新类或函数。或者有没有人对如何轻松做到这一点有什么建议

您可以使用一个辅助变量作为标志

例如,将其定义为
self.flag=False
。单击按钮时,将变量的值更改为True(
self.flag=True
),这是跟踪按钮是否被按下的方式

例如,您希望跟踪是否单击了按钮1:

 class MemoryBricks:
      def __init__(self, master):
           # Define "flag variable" for button1
           self.flag_btn1 = False
在单击按钮1时将执行的函数(或部分代码)中,更改标志的状态:

 class showImage(MemoryBricks):
      def __init__(self, master):
           if master == 1:
                # Change state of the flag
                self.flag_btn1 = True
                load1 = Image.open('Kittens1.GIF')
                load1Size = load1.resize((145, 145))
                render1 = ImageTk.PhotoImage(load1Size)
                img1 = Label(image=render1)
                img1.image = render1
                img1.grid(row=0, column=0)
现在,您可以检查是否单击了按钮1:

 class MemoryBricks:
      def __init__(self, master):
           # Define "flag variable" for button1
           self.flag_btn1 = False
例如,在某些信号/动作上:

 if self.flag_btn1: # True
      print("button1 was clicked")
 else: # False
      print("button1 wasn't clicked")

谢谢你的意见!您对我如何将其纳入代码有何建议?根据您的代码,当单击按钮时,将在按钮顶部创建具有所需图像的新标签。因此,如果标签与其他图像不匹配,您可以销毁标签,然后可以再次显示带有默认图像的按钮。