简体   繁体   English

如何跟踪是否已单击按钮

[英]How to keep track if a button has been clicked

I'm making a memory game and I can't figure out how to keep track if a button has been clicked or not. 我正在做一个记忆游戏,我不知道如何跟踪是否单击了一个按钮。 I would like the tiles to change back to the default image if two images does'nt match when clicked but to stay as the new images if they match. 如果两个图像在单击时不匹配,我希望这些图块更改回默认图像,但如果它们匹配则保留为新图像。

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)

I believe that I maybe have to make a new class or maybe a function. 我相信我可能必须做一个新的类或一个函数。 Or does anyone have any suggestions on how to do this quite easily? 还是有人对如何轻松实现此操作有任何建议?

you can have an auxiliary variable that will behave as a flag. 您可以有一个辅助变量,该变量将充当标志。

for example define it as self.flag = False . 例如,将其定义为self.flag = False when button is clicked ,change the value of a variable in True ( self.flag = True ), this is the way you can track whether the button is pressed 单击按钮时,在True中更改变量的值( self.flag = True ),这是您可以跟踪是否按下按钮的方式

for example you want to track if button1 is clicked: 例如,您要跟踪是否单击了button1:

 class MemoryBricks:
      def __init__(self, master):
           # Define "flag variable" for button1
           self.flag_btn1 = False

in function(or part of the code) which will be executed when button1 is clicked change the state of the flag: 在单击button1时将要执行的功能(或代码的一部分)中,更改标志的状态:

 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)

now you can check if button1 is clicked: 现在您可以检查是否单击了button1:

for example, on some signal/action: 例如,根据某些信号/动作:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM