def valitse_tyyppi(): """ Tarkastaa syötteestä, mitä tyyppiä komponentti on """ tyyppi = ik.lue_kentan_sisalto(tila["syote"]) ik.tyhjaa_kentan_sisalto(tila["syote"]) if tyyppi.isdigit(): ik.avaa_viesti_ikkuna( "VIRHE", "Komponentti voi olla vastus(r), kela(l) tai kondensaattori(c)!", True) elif len(tyyppi) > 1: if tyyppi == 'aasisvengaa': ik.avaa_viesti_ikkuna("Vanha vitsi!", "Aasi ei svengaa.", True) ik.avaa_viesti_ikkuna( "VIRHE", "Komponentti voi olla vastus(r), kela(l) tai kondensaattori(c)!", True) elif tyyppi == 'r' or 'l' or 'c': tallenna_tyyppi(tyyppi) else: ik.avaa_viesti_ikkuna( "VIRHE", "Komponentti voi olla vastus(r), kela(l) tai kondensaattori(c)!", True)
def aseta_jannite(): """ Pyytää käyttäjältä tarvittavat tiedot piirin virran laskemiseksi. Kyselyä toistetaan kunnes tarvittavat tiedot on annettu. Jännite annettama ilman merkintää V, mutta voidaan antaa kerrannaisyksikön kanssa, kuten 1p""" tila["jannite"] = ik.lue_kentan_sisalto(jannite_kentta) jannite = tila["jannite"][0:-1] yksikko = tila["jannite"][-1] while True: try: if tila["jannite"] == "0": raise(ValueError) else: pass jannite == int(jannite) except ValueError: ik.avaa_viesti_ikkuna("Virhe", "Et antanut kelvollista jännitettä!", virhe=False) return aseta_jannite for yksikko in SI_kerrannaisyksikot: U = jannite * SI_kerrannaisyksikot.get("yksikko") #U = jannite if False: ik.avaa_viesti_ikkuna("Virhe", "Et antanut kelvollista jännitettä!\nVinkki: Anna jännite ilman yksikköä, esim. muodossa 12.0k", virhe=False) else: pass arvot["U"] = U pi.piirra_jannitelahde(piirin_piirto_tila, arvot["U"], arvot["f"], v_asetteluvali=2) ik.tyhjaa_kentan_sisalto(jannite_kentta)
def lisaaKomponentti(): """ Lisää komponentin haaraan. """ komp = ikn.lue_kentan_sisalto(KLIITTYMÄ["syote"[0]]).strip().lower() arvo = ikn.lue_kentan_sisalto(KLIITTYMÄ["syote"[1]]).strip() id = ikn.lue_kentan_sisalto(KLIITTYMÄ["syote"[2]]).strip() sallitut = ("v", "r", "k", "l", "c") if not komp in sallitut: ikn.avaa_viesti_ikkuna("Virhe!", "Komponentti ei ollut kelvollinen.", True) ikn.tyhjaa_kentan_sisalto(KLIITTYMÄ["syote"[0]]) return if komp == "v": komp = "r" elif komp == "k": komp = "l" arvo = sim.muunnaSi(arvo) if not arvo: ikn.avaa_viesti_ikkuna("Virhe!", "Arvo ei ollut kelvollinen.", True) ikn.tyhjaa_kentan_sisalto(KLIITTYMÄ["syote"[1]]) return komp = (komp, arvo) id = tarkistaID(id) KLIITTYMÄ["komponentit"][id].append(komp) komponenttilistaus() piirtaja()
def nimi(): '''Tallentaa sen nimen''' stats['nimi'] = iku.lue_kentan_sisalto(elementit['vika']) iku.tyhjaa_kentan_sisalto(elementit['vika']) iku.piilota_ali_ikkuna(elementit['vikaik']) ali = iku.luo_ali_ikkuna('') liput['save'] = True iku.luo_tekstirivi(ali, 'Tulokset tallennettu!')
def aseta_taajuus(): """ Lukee liukulukuarvon syötekentästä ja asettaa sen piirin jännitelähteen taajuudeksi. """ try: tila["taajuus"] = ik.lue_kentan_sisalto(tila["syote"]) if tila["taajuus"][-1].isdigit(): ik.kirjoita_tekstilaatikkoon( tila["laatikko"], "Taajuus: {} Hz".format(float(tila["taajuus"]))) else: tila["taajuus"] = muuta_kerrannaisyksikko(tila["taajuus"]) ik.kirjoita_tekstilaatikkoon( tila["laatikko"], "Taajuus: {} Hz".format(float(tila["taajuus"]))) except TypeError: ik.avaa_viesti_ikkuna("VIRHE", "Syöte ei ollut kelvollinen", True) ik.tyhjaa_kentan_sisalto(tila["syote"])
def asetaTaajuus(): """ Lukee syötekenttää ja koettaa asettaa taajuuden. """ taajuusTulokas = ikn.lue_kentan_sisalto(KLIITTYMÄ["syote"[1]]).strip() # Muunnos SI yksikköön. Tarkistaa myös syötteen kelvollisuuden. Jos ei kelvollinen, # palauttaa "None" arvon. taajuusTulokas = sim.muunnaSi(taajuusTulokas) if taajuusTulokas: KLIITTYMÄ["taajuus"] = taajuusTulokas tulostus = sim.Si_ksi(taajuusTulokas) ikn.kirjoita_tekstilaatikkoon( KLIITTYMÄ["logi"], "Taajuus: {}{} Hz".format(tulostus[0], tulostus[1])) else: ikn.avaa_viesti_ikkuna("Virhe!", "Syöte ei ollut kelvollinen.", True) ikn.tyhjaa_kentan_sisalto(KLIITTYMÄ["syote"[1]])
def laske_arvo(): """ Laskee impedanssin eri komponenttityypeille, tallentaa ne sanakirjan komponentit-listaan ja kutsuu piirtämisfunktiota """ try: arvo = float(ik.lue_kentan_sisalto(tila["syote"])) tyyppi = tila["tyyppi"] ik.tyhjaa_kentan_sisalto(tila["syote"]) if tyyppi == 'r': ik.kirjoita_tekstilaatikkoon( tila["laatikko"], "Vastuksen impedanssi on {ohmi:.2f} ohmia.".format(ohmi=arvo)) tila["komponentit"].append((tyyppi, arvo)) tila["impedanssit"].append(arvo) piirra_piiri() elif tila["tyyppi"] == 'l': impedanssi = 2 * PI * tila["taajuus"] * arvo ik.kirjoita_tekstilaatikkoon( tila["laatikko"], "Kelan induktanssi taajuudella {hertsi:.2f} Hz on {ohmi:.3f} ohmia." .format(hertsi=tila["taajuus"], ohmi=impedanssi)) tila["komponentit"].append((tyyppi, impedanssi)) tila["reaktanssit"].append(impedanssi) piirra_piiri() elif tila["tyyppi"] == 'c': impedanssi = 1 / (2 * PI * float(tila["taajuus"]) * arvo) ik.kirjoita_tekstilaatikkoon( tila["laatikko"], "Kondensaattorin kapasitanssi taajuudella {hertsi:.2f} Hz on {ohmi:.3f} ohmia." .format(hertsi=tila["taajuus"], ohmi=impedanssi)) tila["komponentit"].append((tyyppi, impedanssi)) tila["reaktanssit"].append(impedanssi) piirra_piiri() except ValueError: ik.avaa_viesti_ikkuna("VIRHE", "Syötä liukuluku!", True)
def arvo_kasittelija(): '''Funktio hakee ja tarkistaa pelaajan antaman arvon. Kentta on tekstikenttä johon käyttäjä kirjoittaa, teksti alue johon kirjoitetaan tekstiä.''' try: peli["korkeus"] = int(iku.lue_kentan_sisalto(elementit["korkeus"])) peli["leveys"] = int(iku.lue_kentan_sisalto(elementit["leveys"])) peli["miinat"] = int(iku.lue_kentan_sisalto(elementit["miinat"])) if peli["korkeus"] <= 0 or peli["leveys"] <= 0 or peli["miinat"] <= 0: iku.avaa_viesti_ikkuna("Virhe", "Arvojen täytyy olla suurempia kuin nolla", True) else: iku.tyhjaa_kentan_sisalto(elementit["leveys"]) iku.tyhjaa_kentan_sisalto(elementit["korkeus"]) iku.tyhjaa_kentan_sisalto(elementit["miinat"]) liput["peli"] = True iku.lopeta() except ValueError: iku.avaa_viesti_ikkuna("Virhe", "Arvojen täytyy olla kokonaislukuja", True)