Zjištění souřadnic v gridu (TkInter) – Python – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Zjištění souřadnic v gridu (TkInter) – Python – Fórum – Programujte.comZjištění souřadnic v gridu (TkInter) – Python – Fórum – Programujte.com

 

Vozka
~ Anonymní uživatel
3 příspěvky
23. 4. 2008   #1
-
0
-

Dobrý ještěr.
Pracuji na jednoduchém elektronickém úkolníčku, převody kódování jsem díky vám snadno vyřešil, ovšem nyní jsem se zasekl jinde. Momentálně zařizuji možnost upravit v úkolníčku záznam, ovšem setkal jsem se se dvěma problémy, nejdříve pastnu důležité funkce pro pochopení.

def vypis(): # tato vypíše do hlavního okna seznam úkolů

row = 2
global Lporadi, Ldulezitost, Ltext, Lcas, Ldatum, Lalert, Luprav

...zkráceno...

for n in ukoly:
if n > 0:
Lporadi = Lporadi+[Label(root, text=str(n[0])+".")]
Lporadi[row-2].grid(row=row, column=0, padx=10, sticky=NW)
Ldulezitost = Ldulezitost+[Label(root, text=unicode(n[1]))]
Ldulezitost[row-2].grid(row=row, column=1, padx=10, sticky=NW)
Ltext = Ltext+[Message(width=500, text=n[2])]
Ltext[row-2].grid(row=row, column=2, padx=5, sticky=NW)
Lcas = Lcas+[Label(root, text=(n[3][0],":",n[3][1]))]
Lcas[row-2].grid(row=row, column=3, padx=10, sticky=NW)
Ldatum = Ldatum+[Label(root, text=(str(n[4][2])+". "+str(n[4][1])+". "+str(n[4][0])))]
Ldatum[row-2].grid(row=row, column=4, padx=10, sticky=NW)
Lalert = Lalert+[Label(root, text=n[5])]
Lalert[row-2].grid(row=row, column=5, padx=10, sticky=NW)
Luprav = Luprav+[Button(root, text=u"Upravit")]
Luprav[row-2].grid(row=row, column=6, sticky=NW, padx=5)
Luprav[row-2].bind("<1>", uprav2(Luprav[row-2])) # důležité, tohle u každého záznamu vytvoří tlačítko, které otevře upravovací okno (funkce uprav2)
row = row + 1


def uprav2(instance): # Vytvoří okno pro úpravu záznamu. Parametr neco je instance TkInteru "Event", kterou mi nevím proč posílá a nevím jak ji využít ani jak se jí zbavit.

print instance.grid_info()
global dulezitostu, predmetu, hodinyu, minutyu, denu, mesicu, roku, upozorneniu
ouprav = Toplevel()
ouprav.title("Upravit záznam č. ")
ouprav.option_add('*Font', 'Arial 10')
Label(ouprav, text=u"Důležitost:").grid(row=1, column=0, padx=1, sticky=NW)

...zkráceno, tady jsou widgety stejné jako ve "vypsat", až na to že se jinak jmenují...

zapsatu = Button(ouprav, text=u"Přidat!", command=upravzaznam)
zapsatu.grid(row=1, column=15, sticky=NW, padx=5)


No a nakonec funkce upravzaznam, která vezme data z okna pro úpravu a zapíše je do proměnné se seznamem úkolů:
def upravzaznam():

global ukoly
mesic2 = int(mesicu.get())
den2 = int(denu.get())
hodiny2 = int(hodinyu.get())
minuty2 = int(minutyu.get())
if mesic2 < 10:
mesic2 = "0"+str(mesic2)
if den2 < 10:
den2 = "0"+str(den2)
if hodiny2 < 10:
hodiny2 = "0"+str(hodiny2)
if minuty2 < 10:
minuty2 = "0"+str(minuty2)
predmet2 = predmetu.get(1.0, END)
predmet3 = predmet2[0:len(predmet2)-1]
cas = str(dulezitostu.get())+str(roku.get())+str(mesic2)+str(den2)+str(hodiny2)+str(minuty2)
ukoly[3] = [0, dulezitostu.get(), predmet3, [str(hodinyu.get()), minuty2], [str(roku.get()), str(mesicu.get()), str(denu.get())],
# tak a tady vidíte, že se zapisuje do proměnné ukoly na třetí (tedy vlastně čtvrtou) pozici, což je právě problém, který popíšu níže.
str(alert), str(cas)]
if len(ukoly)>1:
if ukoly[0] == 0:
ukoly.remove(0)
if len(ukoly)>1:
ukoly.sort(key=operator.itemgetter(6))
vypis()
zapis_do_souboru()



Dokud je napevno dané, který záznam upravuji, vše funguje - zde tedy chyba není. Jenže mám problém - potřebuji zjistit, ve kterém řádku se nachází tlačítko, na které jsem klikl a který záznam tudíž upravuji. To se dá udělat tak, že jako argument funkci uprav2 (ta, která tvoří okno pro úpravu záznamu) odeslal jednoduše celou instanci tlačítka a následně ve funkci uprav2 vyčetl v jakém řádku se nachází pomocí grid_info() (to ještě není úplně hotové jak můžete vidět), jenže problém je v tom, že se funkce uprav2 spustí už při startu programu místo po kliknutí na tlačítko, takže se při spuštění objeví pět stejných oken pro úpravu (tolik je záznamů v databázi) a navíc pokud je pozavírám a kliknu na tlačítko Přidat!, tak se funkce znovu nespustí a žádné okno se neobjeví. Může mi někdo prosím poradit co s tím? V programování jsem naprostý začátečník a na tohle jsem nikde odpověď nenašel (ač jsem hledal, tutoriály z programujte mám také přečtené).

Toto se mimochodem stane jen pokud funkci uprav2 posílám nějaký argument, jinak ne, jenže nevím jak by bez odesílání argumentu bylo možné zjistit, na které z tlačítek jsem klikl (možná pomocí oné odesílané instance event co se odesílá jen když žádný argument neodešlu sám?).

Předem díky za odpověď.

Nahlásit jako SPAM
IP: 77.237.140.–
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, 15 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ý