如何检测鼠标单击是否选择了显示的颜色b

2024-06-25 05:56:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道用于检测用户是否在tkinter中单击了所需颜色的命令,以下是我的程序:

from tkinter import*
from random import*

fenetre=Tk()
fenetre.title('Jeu Chlepko Peter')
fenetre.geometry('500x280+500+280')

zone=Canvas(fenetre,width=500,height=100)
zone.grid(row=3, rowspan=3, column=0, columnspan=3)
zone.create_rectangle(0,0,500,200,fill='Grey')
couleurs=['Red','Green','Blue','Yellow','White','Purple','Pink','Black','Cyan','Orange']
shuffle(couleurs)



def jouer():
    zone.total=0
    zone.create_rectangle(0,0,500,200,fill='Grey')
    zone.alea=randint(0,4)
    zone.create_oval(0,100,100,0,fill=couleurs[zone.alea])
    zone.create_oval(200,100,100,0,fill='Blue')
    zone.create_oval(300,100,200,0,fill='White')
    zone.create_oval(400,100,300,0,fill='Black')
    zone.create_oval(500,100,400,0,fill='Orange')



bouton_jouer=Button(fenetre,text="Lancer le jeu",command=jouer)
bouton_jouer.grid(row=1,column=1)

description=Label(fenetre,text='')
description.grid(row=2,column=1)



bouton_quitter=Button(fenetre,text='Quitter', command=fenetre.destroy)
bouton_quitter.grid(row=7,column=1)

description=Label(fenetre,text='Cliquez sur la couleur demandée')
description.grid(row=0, column=1)

enter code here

fenetre.mainloop() 

如果你能回复我,我将非常高兴


Tags: textfromzonetkintercreatecolumndescriptionfill
2条回答

我在代码中添加了onClick函数。这个函数从tkinter接收哪个小部件调用它以及一些信息,比如x,y坐标。 我用它在画布中找到了用户单击的最近的对象。 然后我使用itemcget来判断对象是什么颜色,并将颜色打印到终端输出。然后你可以用它来做任何你需要的事情

from tkinter import *
from random import *

fenetre=Tk()
fenetre.title('Jeu Chlepko Peter')
fenetre.geometry('500x280+500+280')

zone=Canvas(fenetre,width=500,height=100)
zone.grid(row=3, rowspan=3, column=0, columnspan=3)
zone.create_rectangle(0,0,500,200,fill='Grey')
couleurs=['Red','Green','Blue','Yellow','White','Purple','Pink','Black','Cyan','Orange']
shuffle(couleurs)


def onClick(event):
    item = event.widget.find_closest(event.x,event.y)
    color = event.widget.itemcget(item,'fill')
    print(color)

def jouer():
    zone.total=0
    zone.create_rectangle(0,0,500,200,fill='Grey')
    zone.alea=randint(0,4)
    zone.create_oval(0,100,100,0,fill=couleurs[zone.alea])
    zone.create_oval(200,100,100,0,fill='Blue')
    zone.create_oval(300,100,200,0,fill='White')
    zone.create_oval(400,100,300,0,fill='Black')
    zone.create_oval(500,100,400,0,fill='Orange')



bouton_jouer=Button(fenetre,text="Lancer le jeu",command=jouer)
bouton_jouer.grid(row=1,column=1)

description=Label(fenetre,text='')
description.grid(row=2,column=1)

zone.bind('<Button-1>',onClick)

bouton_quitter=Button(fenetre,text='Quitter', command=fenetre.destroy)
bouton_quitter.grid(row=7,column=1)

description=Label(fenetre,text='Cliquez sur la couleur demandée')
description.grid(row=0, column=1)

fenetre.mainloop() 

据我所知,当用户单击Lancer le jeu按钮时,您希望在每个游戏中从couleurs列表中选择4种颜色。然后,您需要从4种选择的颜色中随机选择一种,并要求用户单击正确的颜色

以下是为实现目标而发布的代码的修改版本:

from tkinter import *
from random import randint, shuffle

fenetre=Tk()
fenetre.title('Jeu Chlepko Peter')
fenetre.geometry('550x280+500+280')

zone=Canvas(fenetre,width=550,height=100)
zone.grid(row=3, rowspan=3, column=0, columnspan=3)
zone.create_rectangle(0,0,550,200,fill='Grey')

couleurs=['Red','Green','Blue','Yellow','White','Purple','Pink','Black','Cyan','Orange']

def on_circle_click(event):
  # get the item being clicked
  item = event.widget.find_withtag(CURRENT)[0]
  # get its color
  color = event.widget.itemcget(item, 'fill')
  print(color)
  if color == couleurs[zone.alea]:
    # do whatever you want
    print('correct color selected')
  else:
    print('oops! try again!')

# bind mouse click event to items with tag 'circle' only
zone.tag_bind('circle', '<Button-1>', on_circle_click)

def jouer():
  shuffle(couleurs) # rearrange the colors
  zone.alea = randint(0, 3) # get a random number between 0 and 3
  # remove existing circles
  zone.delete('random', 'circle')
  # create the circle with target color
  zone.create_oval(0,100,100,0,fill=couleurs[zone.alea], tags='random')
  # create circles with the first four colors in the color list with tag 'circle'
  zone.create_oval(250,100,150,0,fill=couleurs[0], tag='circle')
  zone.create_oval(350,100,250,0,fill=couleurs[1], tag='circle')
  zone.create_oval(450,100,350,0,fill=couleurs[2], tag='circle')
  zone.create_oval(550,100,450,0,fill=couleurs[3], tag='circle')

bouton_jouer=Button(fenetre,text="Lancer le jeu",command=jouer)
bouton_jouer.grid(row=1,column=1)

description=Label(fenetre,text='')
description.grid(row=2,column=1)

bouton_quitter=Button(fenetre,text='Quitter', command=fenetre.destroy)
bouton_quitter.grid(row=7,column=1)

description=Label(fenetre,text='Cliquez sur la couleur demandée')
description.grid(row=0, column=1)

fenetre.mainloop()

相关问题 更多 >