Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Python: Tkinter-valikko ei toimi

kyyhky89 [02.07.2019 21:15:52]

#

Hei, toivoisin neuvoa. Tein python ohjelman windowsissa ja nyt kun haluan käyttää laatimaani ohjelmaa linux-ympäristössä, niin ongelmia on ilmennyt? Minulla on siis yksinkertainen valikko:

valikko.add_cascade(label="Sulje ohjelma", command=lopeta)

Kun ajan pythonia windowsissa, niin painamalla valikkoruutua "Sulje ohjelma" ohjelma siirtyy aliohjelmaan def lopeta():

Kun ajan saman ohjelman linux-ympäristössä, niin mitään ei tapahdu, ei tule virhettäkään.

Onko olemassa jokin kirjasto mikä minun tulisi asentaa, jotta tällainen ongelma tulisi ratkaistuksi. Haluaisin käyttää samaa ohjelmaa molemmilla alustoilla, siksi haluaisin ohjelman olevan samanlainen molemmissa ympäristöissä.

Kiitos

Metabolix [02.07.2019 22:33:39]

#

Tuossa on nyt selvästi sellainen virhe, että luot alavalikon (add_cascade) etkä komentopainiketta (add_command). On ihan totta, että tällaisen alavalikon klikkaaminen ei aktivoi toimintoa Linuxissa, ja toisaalta mielestäni tämä on aivan oikein ja järkevää. Jos haluat painikkeen, käytä funktiota add_command.

Voisit myös miettiä kuvaavia otsikoita (ei esim. ”Windows-Linux” vaan ”Tkinter-valikko ei toimi”) ja oikeaa keskustelualuetta (esim. Ohjelmointiongelmat, kun on kyse ongelmasta ohjelmoinnissa).

kyyhky89 [03.07.2019 11:36:11]

#

Kiitos paljon sinulle. Mahtaako tilanne olla sama seuraavassa:

viitesiirtolista=txttied.readlines()

Tämä toimii windowsissa, mutta ei linuxissa. Kyse on varmaan tuosta readlines() käskystä ja sen s-kirjaimesta???

Metabolix [03.07.2019 17:04:06]

#

kyyhky89 kirjoitti:

Mahtaako tilanne olla sama seuraavassa: txttied.readlines() – – Kyse on varmaan tuosta readlines() käskystä ja sen s-kirjaimesta???

Tätä logiikkaa en pysty seuraamaan. Miten voisi olla ”sama tilanne”, kun edellinen ongelma liittyi valikon rakentamiseen ja toinen ongelma ilmeisesti tiedoston lukemiseen? Miten s-kirjain liittyy ongelmaan?

Mikä edes on ongelmana, ts. minkälainen virhe tiedoston lukemisessa tapahtuu?

kyyhky89 [04.07.2019 08:46:58]

#

Hei. Anteeksi, kun kirjoitin epäselvästi:-)
Tarkoitin sitä, että siirtymisestä windowsista linuxiin ei ole ollut helppo.

Vika löytyi tästä:

Tämä toimii windowsissa

txttied = open("data/"+"Viite"+mikavuosi+".txt", "r") # Avaa tiedostosta valittu
viitesiirtolista=txttied.readlines()

Jotta se toimisi myös linuxissa on komentoa tarkennettava:

txttied = open("data/"+"Viite"+mikavuosi+".txt", "r", encoding="latin-1") # Avaa tiedostosta valittu
viitesiirtolista=txttied.readlines()

Muita huomioita on ollut mm. startfilen puuttuminen linuxista, korjasin ohjelmaani näin:

if sys.platform == "win32":
    os.startfile("Printtikansio\keres.xlsx","print")
else:
    opener ="open" if sys.platform == "darwin" else "xdg-open"
    subprocess.call([opener, "Printtikansio/keres.xlsx","print"])

Taistelin lisäksi mm. Python Idlen kanssa, kun en millään ymmärtänyt, miksi värit olivat kadonneet kun ohjelmoin komentoja. En löytänyt mistään tietoa ja löin päätäni seinään vaikka kuinka pitkään. Lopulta keksin miten värit palautuvat. Windowsissa siis ei ollut ongelmaa, se koski vain linuxia. Jos tallennan ohjelman ilman päätettä .py ohjelma toimii normaalisti, mutta silloin noita värejä ei näy. Kun lisäsin ohjelmani perään tuon .py tunnisteen, niin värit palasivat.

Oma päätelmäni on se, että windows sietää paljon epätarkkuuksia, mutta linux on tässä suhteessa tosi tarkka alusta Pythonille.

Kiitos sinulle Metabolix

Metabolix [04.07.2019 14:23:31]

#

Tiedoston merkistössä UTF-8 on harkinnan arvoinen vaihtoehto, koska siinä olisi mahdollisuus myös monenlaisiin vieraskielisiin merkkeihin tarvittaessa.

Python-tiedostolla kannattaa kyllä yleensä olla py-pääte selvyyden vuoksi. Ero toiminnasta Windowissa johtuu siitä, että Windowsin jotkin komennot arvailevat sopivaa tiedostopäätettä, mutta Linuxissa näin ei yleensä ole. Linuxissa usein ohjelma on asennettu omaan paikkaansa ja sille tehdään tarvittaessa erillinen käynnistysskripti ilman tiedostopäätettä. Eli tiedostossa "ohjelma.py" olisi varsinainen koodi, ja tiedostossa "ohjelma" olisi vain minimaalinen koodi, jolla saadaan "ohjelma.py" ladattua. Käynnistyskoodin ei tarvitse olla edes Pythonia, vaan se on usein /bin/sh:lla ajettava komentoriviskripti.

Avausongelmassa yhtenäisempi ratkaisu olisi jättää startfile kokonaan pois ja käyttää avaamiseen alustan mukaan komentoa start tai open tai xdg-open.

Vastaus

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

Tietoa sivustosta