Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Python: Muuttujan arvon sitominen painikkeeseen

Sivun loppuun

Lipton_green [26.10.2016 08:32:55]

#

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!

Grez [26.10.2016 09:55:54]

#

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)

Lipton_green [26.10.2016 14:18:25]

#

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

Grez [26.10.2016 14:25:56]

#

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

Lipton_green [26.10.2016 14:30:20]

#

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!

Grez [26.10.2016 16:05:33]

#

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)

Lipton_green [26.10.2016 16:05:54]

#

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:-)

Grez [26.10.2016 16:24:37]

#

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]()

Lipton_green [26.10.2016 16:38:17]

#

Voi kiitos sinulle, olet tosi hyvä:-)

Minulle oli tässä paljon uutta. Mitä tuo command=functools.partial tarkoittaa?

Vielä kerran tuhannesti kiitoksia.

Grez [26.10.2016 16:45:25]

#

Se tarkoittaa, että commandin arvoksi laitetaan functools.partial -funktion palauttama partial-objekti.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta