Python 如何检测鼠标单击是否选择了下面显示的颜色
我想知道用于检测用户是否在tkinter中单击了所需颜色的命令,以下是我的程序:Python 如何检测鼠标单击是否选择了下面显示的颜色,python,tkinter,Python,Tkinter,我想知道用于检测用户是否在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, co
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()
如果您能回复我,我将非常高兴。我已经在您的代码中添加了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()
从tkinter导入*
从随机导入*
fenetre=Tk()
fenetre.头衔(“Jeu Chlepko Peter”)
fenetre.几何学('500x280+500+280')
区域=画布(fenetre,宽度=500,高度=100)
zone.grid(行=3,行span=3,列=0,列span=3)
区域。创建矩形(0,0500200,填充为灰色)
颜色=[‘红色’、‘绿色’、‘蓝色’、‘黄色’、‘白色’、‘紫色’、‘粉色’、‘黑色’、‘青色’、‘橙色’]
洗牌(库勒)
def onClick(事件):
item=event.widget.find_最近(event.x,event.y)
color=event.widget.itemcget(项,'fill')
印刷品(彩色)
def jouer():
分区总数=0
区域。创建矩形(0,0500200,填充为灰色)
zone.alea=randint(0,4)
创建分区(0100,0,fill=couleurs[zone.alea])
分区。创建椭圆(200100100,0,填充为蓝色)
区域。创建椭圆(300100200,0,填充为白色)
区域。创建椭圆(400100300,0,填充为黑色)
分区。创建椭圆(500100400,0,填充为橙色)
bouton_jouer=按钮(fenetre,text=“Lancer le-jeu”,command=jouer)
bouton_jouer.网格(行=1,列=1)
描述=标签(fenetre,文本=“”)
description.grid(行=2,列=1)
区域绑定(“”,onClick)
bouton_quitter=按钮(fenetre,text='quitter',command=fenetre.destroy)
bouton_quitter.grid(行=7,列=1)
description=标签(fenetre,text='Cliquez sur la couleur demandée')
description.grid(行=0,列=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()
从tkinter导入*
从随机导入randint,洗牌
fenetre=Tk()
fenetre.头衔(“Jeu Chlepko Peter”)
费内特几何体('550x280+500+280')
区域=画布(fenetre,宽度=550,高度=100)
zone.grid(行=3,行span=3,列=0,列span=3)
区域。创建矩形(0,0550200,填充为灰色)
颜色=[‘红色’、‘绿色’、‘蓝色’、‘黄色’、‘白色’、‘紫色’、‘粉色’、‘黑色’、‘青色’、‘橙色’]
循环上的def单击(事件):
#获取正在单击的项目
item=event.widget.find_with tag(当前)[0]
#得到它的颜色
color=event.widget.itemcget(项“填充”)
印刷品(彩色)
如果颜色==couleurs[zone.alea]:
#你想干什么就干什么
打印('选择正确的颜色')
其他:
打印('oops!重试!')
#仅将鼠标单击事件绑定到带有标记“圆圈”的项目
区域。标记绑定('圆圈','',点击圆圈)
def jouer():
洗牌(couleurs)#重新排列颜色
zone.alea=randint(0,3)#获取一个介于0和3之间的随机数
#删除现有的圆圈
删除区域('random','circle')
#使用目标颜色创建圆
创建分区(0100,0,fill=couleurs[zone.alea],tags='random')
#使用带有标记“circle”的颜色列表中的前四种颜色创建圆形
创建椭圆区域(250100150,0,fill=couleurs[0],tag='circle')
创建椭圆区域(350100250,0,fill=couleurs[1],tag='circle')
创建椭圆区域(450100350,0,fill=couleurs[2],tag='circle')
创建椭圆区域(550100450,0,fill=couleurs[3],tag='circle')
bouton_jouer=按钮(fenetre,text=“Lancer le-jeu”,command=jouer)
bouton_jouer.网格(行=1,列=1)
描述=标签(fenetre,文本=“”)
description.grid(行=2,列=1)
bouton_quitter=按钮(fenetre,text='quitter',command=fenetre.destroy)
bouton_quitter.grid(行=7,列=1)
description=标签(fenetre,text='Cliquez sur la couleur demandée')
description.grid(行=0,列=1)
fenetre.mainloop()