Olisiko joku voinut auttaa minua tässä miltei mahdottoman tuntuisessa ongelmassa:
def Avaa_kirjasto(): global avaa_kirjasto avaa_kirjasto = Tk() avaa_kirjasto.title("Avaa kirjasto ") Label(avaa_kirjasto, text="Näytä kirjaston nimi: ").grid(row=0, column=0) for laskin in range(laskuri): Button(avaa_kirjasto, text=kirjalista[laskin].strip(), command=Kirja).grid(row=laskin+2, column=0, sticky=W, pady=2)
Ohjelma avaa valikon jossa on alekkain monta erinimistä painiketta erinimisille kirjoille. Nyt haluaisin painaa esim. kolmatta painiketta nimeltä Aku Ankka ja sen pitäisi johtaa oikean tiedoston avaamiseen. Olen yrittänyt järkeillä, että tuohon Command=Kirjaan pitäisi saada liitettyä järjestysnumero painikkeelle, koska sillä tavoin osaisin avata listasta oikean kirjan. En vain osaa liittää tuota tietoa painikkeeseen. Löysin kyllä netistä tietoa siitä, miten tuon komennon jälkeen lisätään "Command=Kirja(x,y), mutta silloin ohjelma siirtyy automaattisesti aliohjelmaan painoi näppäintä tai ei.
Olisiko kenelläkään ideaa tähän, kiitos.
Mod. lisäsi kooditagit!
Seuraavan viikon oikeiden lottonumeroiden laskeminen on mahdoton tehtävä. Aika harvoin oikeasti mahdottomia tehtäviä tulee ohjelmoinnissa vastaan.
Jos ajatellaan että kirjan numero (tai muu tunniste) on vaikka x niin
command = lambda: Kirja(x)
tai
command = partial(Kirja, x)
Kiitos Grez. Kuinka käytän tuota tietoa hyväksi.
Tässä alla sinulle palkinnoksi seuraavan viikon lottonumerot:
5, 12, 22, 23, 24, 30 ja 31
Lipton_green kirjoitti:
Kuinka käytän tuota tietoa hyväksi.
Oliko tämä tarkoitettu kysymykseksi?
Lipton_green kirjoitti:
Tässä alla sinulle palkinnoksi seuraavan viikon lottonumerot:
5, 12, 22, 23, 24, 30 ja 31
Kiitos kiitos, sittenpä nähdään menikö oikein :P
Kyllä vain, olen vasta aloittelija ja tämä tuntuu kovin vaikealta ymmärtää. Olen yrittänyt sijoittaa tuota command = lambda: Kirja(x) ohjelmaan, mutta en keksi kuinka saisin sen toimimaan siinä.
def Avaa_kirjasto(): global avaa_kirjasto avaa_kirjasto = Tk() avaa_kirjasto.title("Avaa kirjasto ") Label(avaa_kirjasto, text="Näytä kirjaston nimi: ").grid(row=0, column=0) for laskin in range(laskuri): Button(avaa_kirjasto, text=kirjalista[laskin].strip(), command=Kirja).grid(row=laskin+2, column=0, sticky=W, pady=2)
Mod. korjasi kooditagit!
No olisko vaikka viimeiselle riville
Button(avaa_kirjasto, text=kirjalista[laskin].strip(), command=lambda: Kirja(laskin)).grid(row=laskin+2, column=0, sticky=W, pady=2)
Tarkoitatko niin, että tuo lambda kirjataan tällä tavoin:
Button(avaa_kirjasto, text=kirjalista[laskin].strip(), command=lambda: Kirja(laskin)).grid(row=laskin+2, column=0, sticky=W, pady=2)
Nyt kun ohjelma siirtyy aliohjelmaan napin painalluksella, se ei käsittääkseni edelleenkään tiedä mitä noista kahdestatoista näppäimestä on painettu, vaan tarjoaa laskurin viimeistä numeroa.
Tuo "laskin" kertoo monesko kirja kirjalistalta haetaan.
Lisäys: Sama ajoitus:-)
No niinpä näköjään lambdalla menee.. Itsekin olen vain pari päivää käyttänyt Pythonia, mutta toinen antamani vaihtoehto eli partial varmaankin toimisi vikalle riville
Button(avaa_kirjasto, text=kirjalista[laskin].strip(), command=functools.partial(Kirja,laskin)).grid(row=laskin+2, column=0, sticky=W, pady=2)
Ja alkuun (jos ei jo ole)
import functools
Ainakin tämä koodi toimi, millä testasin:
import functools #Alusteluja def test(luku): print luku hoi = [None] * 3 laskuri = 3 #Tassa for silmukassa ei suoraan suoriteta test-funktiota, vaan sijoitetaan kutsut muuttujiin for laskin in range(laskuri): hoi[laskin] = functools.partial(test,laskin) #Testataan etta luontivaiheessa ollut laskin-muuttujan arvo on tallentunut hoi[2]() hoi[0]() hoi[1]()
Voi kiitos sinulle, olet tosi hyvä:-)
Minulle oli tässä paljon uutta. Mitä tuo command=functools.partial tarkoittaa?
Vielä kerran tuhannesti kiitoksia.
Se tarkoittaa, että commandin arvoksi laitetaan functools.partial -funktion palauttama partial-objekti.
Aihe on jo aika vanha, joten et voi enää vastata siihen.