Zjištění jména v plátně kliknutím – Python – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Zjištění jména v plátně kliknutím – Python – Fórum – Programujte.comZjištění jména v plátně kliknutím – Python – Fórum – Programujte.com

 

Jakub Vojáček
~ Moderátor
0
Grafoman
4. 6. 2006   #1
-
0
-

Mám takový problém. Mám plátno, na kterém mám vytvořeno několik objektů se stejným tagem a potřeji, aby se při kliknutí na obrázek napsalo jeho jméno.



from Tkinter import*
okno=Tk()
okno.title('Pomoc please')
platno=Canvas()
platno.pack()
def volana_funkce(event):
print event.widget
oval1=platno.create_oval(10,20,30,40,fill='red',tags='klik')
oval2=platno.create_oval(50,70,80,90,fill='blue',tags='klik')
platno.tag_bind('klik','<1>',volana_funkce)
mainloop()


Například když kliknu levým tlačítkem na oval1, tak aby mi to vrátilo oval1. Díky.

Nahlásit jako SPAM
IP: ...–
Navštivte server Matematika pro každého
Najdete zde články zabývající se matematikou základních a středních škol a databázi hlavolamů.
Pro vyzkoušení Vaš
geon0
Grafoman
4. 6. 2006   #2
-
0
-

Myslím, že nepotřebuješ zrovna "oval1", snad ti stačí vědět, na který prvek jsi klikl. Ty prvky jsou normálně očíslovaný od 1 do ... posledního. Takže tvůj oval1 má jméno 1, oval2 má oval2. Vyzkoušej print oval1, oval2.

Bohužel na to jsem nenašel žádnou přímou funkci pro plátno (nějak se mi ale zdá, že by něco takového mělo existovat), takže se to dá obejít třeba tak, že zjistíš souřadnice, na kterých si klik a pak všechny prvky, který se na této souřadnici (na malím čtverečku) vyskytují.

def volana_funkce(udalost):

x, y=udalost.x, udalost.y
print x, y, platno.find_overlapping(x,y,x+1,y+1)


Jestli to máš ale do tvího programu s tisíci prvky, tak to nevím, jak budeš zjišťovat, který prvek v tý hromadě (když jich je několik nad sebou, tak find_overlapping() ti vrátí všechny), je ten pravý ;-)


Nahlásit jako SPAM
IP: ...–
geon. volume doprava.
Jakub Vojáček
~ Moderátor
0
Grafoman
4. 6. 2006   #3
-
0
-

hm:(( takova funkce by urcite mela existovat. A jak si spravne uhodl tech obrazku je nekolik tisic a sou i na sob?, takze tadyto nejde, to jsem taky zkousel:((ale dik za snahu

Nahlásit jako SPAM
IP: ...–
Navštivte server Matematika pro každého
Najdete zde články zabývající se matematikou základních a středních škol a databázi hlavolamů.
Pro vyzkoušení Vaš
geon0
Grafoman
4. 6. 2006   #4
-
0
-

možná ve vrácené n-tici od find_overlapping je vždy první ta, která je nejvýše (která je vidět). mělo by to tak být, ale nevím, nezkoušel jsem.

Nahlásit jako SPAM
IP: ...–
geon. volume doprava.
geon0
Grafoman
4. 6. 2006   #5
-
0
-

ne, tak je to ta poslední - vyzkoušeno :-)

Nahlásit jako SPAM
IP: ...–
geon. volume doprava.
geon0
Grafoman
4. 6. 2006   #6
-
0
-

tak jsem se rozhodl, ?e si znovu, a rad?i p?kn? pe?liv? hned od za??tku, znovu p?e?tu dokumentaci ke Canvas a objevil jsem hned zkraje toto:

Ud?l?tko Canvas v?m umo??uje se odkazovat na prvky n?kolika způsoby. V?ude, kde se o?ek?v? ozna?en? prvku, m??ete pou??t jedno z n?sleduj?c?ho:

* ovlada?e prvku (cel? ??sla)
* zna?ky(tags)
* ALL (v?e)
* CURRENT (aktu?ln?)

CURRENT (nebo "current") zahrnuje prvek pod kurzorem my?i, pokud n?jak? takov? je. Tohoto se d? vyu??t uvnit? vazby ud?losti my?i p?i odkazu na prvek, kter? volanou funkci vyvolal.

je to jasn?, ne? :-)

def klik(udalost):

# na co kliknu, zbarvi se do ?erna
platno.itemconfig(CURRENT, fill="black")

Nahlásit jako SPAM
IP: ...–
geon. volume doprava.
Jakub Vojáček
~ Moderátor
0
Grafoman
4. 6. 2006   #7
-
0
-

děkuju moc, že sis našel čas a našel, Fakt děkuju :super:

Teď jsem se snažil upravit nato, abych zjistil to číslo toho prvku na které jsem kliknul?? Nemůžu na to přijít.D

Nahlásit jako SPAM
IP: ...–
Navštivte server Matematika pro každého
Najdete zde články zabývající se matematikou základních a středních škol a databázi hlavolamů.
Pro vyzkoušení Vaš
geon0
Grafoman
4. 6. 2006   #8
-
0
-

určitě jedna z find_* metod ti pomůže.

Nahlásit jako SPAM
IP: ...–
geon. volume doprava.
Jakub Vojáček
~ Moderátor
0
Grafoman
4. 6. 2006   #9
-
0
-

funguje platno.find_withtag(CURRENT)
Jako obvykle jsi měl pravdu! Dík

Nahlásit jako SPAM
IP: ...–
Navštivte server Matematika pro každého
Najdete zde články zabývající se matematikou základních a středních škol a databázi hlavolamů.
Pro vyzkoušení Vaš
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 19 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý