Kuinka Pythonilla

snake python snake

Eli kuinka luotaisiin pythonilla yksinkertainen GU (QT:lla mieluiten) johon raahata tiedostoja muutama ja järjestää haluamaansa järjestyksen. Lopputulemana ohjelma ajaisi ulkoisena ohjelmana esim. komentokehotteessa toimivan komennon ja yhdistäisi nämä. Otetaan nyt esimerkkiin vaikka _lyhyet_ mpg videot (video1.mpg, video2.mpg, video3.mpg jne) yhdistettäisiin ffmpegillä (en hae tässä sitä, mikä ffmpeg komento tarvittaisiin). Lopussa toki painettaisiin "yhdistä", jonka jälkeen kysyisi tallennettavan tiedoston nimeä ja mihin tallennetaan (tai sitten saisi tallentaa oletuskansioonkin aina joka määriteltynä.

Miksikö kysyn. Aloittelijan kannalta mielenkiintoisempaa olisi lähteä treenaamaan yksinkertaisista GUI:n sisältävistä ohjelmista ja laajentaa sitten taustatietämystä. Usein vaan oppaat tehdään siten, että käsitellään juurikin se puoli ilman käyttöliittymää (mikä toki erittäin tärkeää), mutta käyttöliittymän integroinnista ei juuri sanota sanaakaan "hei maailma" sovellusta pidemmälle.

Eli tuo esimerkin pätkä olis periaatteesa yksinkertainen tapa lähteä liikkeelle kokeilemaan jotain jossa on heti selkeästi näkyvää. Ja samalla yksinkertaisin tapa tehdä "ohjelma" on tehdä GUI valmiille toiminnolle. Olkoonkin etten itse oikeasti esimerkkitapaukseen etsikään, mutta silti.

13

425

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • Käärmes--

      Tossa jotain (muokattu tuolta:http://zetcode.com/tutorials/pyqt4/dragdrop/ )

      import sys
      from PyQt4 import QtGui
      from PyQt4 import QtCore


      class Example(QtGui.QWidget):

      def __init__(self):
      super(Example, self).__init__()

      self.initUI()

      def initUI(self):

      self.setAcceptDrops(True)

      self.setWindowTitle('Drop here')
      self.setGeometry(300, 300, 280, 150)

      def dragEnterEvent(self, e):

      e.accept()

      def dropEvent(self, e):

      e.accept()
      print e.mimeData().text()


      def main():

      app = QtGui.QApplication(sys.argv)
      ex = Example()
      ex.show()
      app.exec_()


      if __name__ == '__main__':
      main()

      Printtaa tiputetun mimedatan...

      • Käärmes--

        Hävitti tabit, mutta kai tuosta selvää...

        Miten ne tabit ym. saikaan tälle palstalle?


      • ssssswwww
        Käärmes-- kirjoitti:

        Hävitti tabit, mutta kai tuosta selvää...

        Miten ne tabit ym. saikaan tälle palstalle?

        Ei tietääkseni mitenkään. Ohjeissa ei ainakaan mainittu mistään code tageista tai vastaavista mikä on suuri sääli. Suomi24 palstaa on uudistettu monta kertaa, mutta vieläkään tämmöiseen epäkohtaan ei ole viitsitty kiinnittää huomiota.

        Kokeeksi tämmöinen helloworldi interaktiivisen tulkin promptin kanssa (en usko että osaa koodata suurempikuin merkkejä mitenkään):
        >>> def hello():
        ... print 'Hello, World!'
        ...
        >>> hello()
        Hello, World!

        Lopuksi vielä kokeilu näillä char entityillä


        ps. sääli kun ei ole esikatseluakaan enää..


      • sssswww
        ssssswwww kirjoitti:

        Ei tietääkseni mitenkään. Ohjeissa ei ainakaan mainittu mistään code tageista tai vastaavista mikä on suuri sääli. Suomi24 palstaa on uudistettu monta kertaa, mutta vieläkään tämmöiseen epäkohtaan ei ole viitsitty kiinnittää huomiota.

        Kokeeksi tämmöinen helloworldi interaktiivisen tulkin promptin kanssa (en usko että osaa koodata suurempikuin merkkejä mitenkään):
        >>> def hello():
        ... print 'Hello, World!'
        ...
        >>> hello()
        Hello, World!

        Lopuksi vielä kokeilu näillä char entityillä


        ps. sääli kun ei ole esikatseluakaan enää..

        Oho, täytyy sanoa että yllätys oli suuri kun molemmat tavat meni läpi.. jatketaan sitten samalla linjalla ja kokeillaan käyttää välilyöntejä sisennyksenä entityinä

        def hello():
            print 'Hello, World!'

        hello()


      • sdfsffd
        sssswww kirjoitti:

        Oho, täytyy sanoa että yllätys oli suuri kun molemmat tavat meni läpi.. jatketaan sitten samalla linjalla ja kokeillaan käyttää välilyöntejä sisennyksenä entityinä

        def hello():
            print 'Hello, World!'

        hello()

        Okei, tuo siis onnistuu jos korvaat rivien alussa olevat välilyönnit entityllä  

        voisi kai se olla helpompaakin tosin


      • Käärmes--
        sdfsffd kirjoitti:

        Okei, tuo siis onnistuu jos korvaat rivien alussa olevat välilyönnit entityllä  

        voisi kai se olla helpompaakin tosin

        Pitää tietysti väsätä skripti joka korvaa tabit, hakasulut ym. ongelmat entityillä...


      • snake python snake

        Vielä en ehtinyt tuota kokeilemaan, mutta kiitos jo tässä vaiheessa.. *Tarjoaa toisen kylmistä sandelseistaan* :)


      • snake python snake
        snake python snake kirjoitti:

        Vielä en ehtinyt tuota kokeilemaan, mutta kiitos jo tässä vaiheessa.. *Tarjoaa toisen kylmistä sandelseistaan* :)

        Ainakaan näin ensialkuun oluen yhteydessä tätä katsottuna, en saanut tuota toimimaan mitenkään, linkin takaa löytyvän esimerkin kylläkin. Ainoa ongelma näissä ohjelmoinnin alkeissa onkin tämä, että ei tuo kovin inspiroivaa ole saada ikkuna joka huutelee jotain tai sallii drag & dropin ilman mitään varsinaista toiminnetta. Eli jos yhden rivin komentorivi komento on niin vaikea toteuttaa että vaatisi pitkän opiskelun, niin syö miestä. Mitään ihmettä en toki odottanutkaan, mutta oletin että olisi kohtuu helppo tehdä GUI joka suorittaa yhden komentosarjan ja tunnistaa että ikkunaan raahatut & siinä vielä jälkikäteen uudelleen järjestetyt tiedostot tunnistuvat siten, että ylin on tiedosto1 siitä seuraava tioedosto2 jne.

        Tämä siis itselläni se suurin hidaste ohjelmoinnin opiskelussa. Osaan C:n alkeitakin paaljon enemmän kuin pythonia, joskin niitä pitäisi palauttaa muistiinkin. Mutta sama ongelma nousee aina esille. Se GUI on niin hankala, kuten tämä yhden rivin esimerkki osoittaa..

        Kuten ekassa esimerkissä annettu juttu menisi kaiketi komennolla:

        cat video1.mpg video2.mpg | ffmpeg -f mpeg -i - -vcodec copy -acodec copy video.mpg

        Samaan GUI ja olet tehnyt noita loputtoman määrän command linen kautta. Itselleni command line ei ole siis este, mutta olisi tosiaan motivoivaa jos saisi edes yksinkertaisen jutun jotenkin tehtyä. No ehkä syytä antaa asian vaan olla, en todellakaan jaksa opiskella pythonia että taidot olisivat edes sillä tasolla kuin taannoin C suhteen olivat (siis alkeet), vain todetakseni että oppaat jättävät oman onnen nojaan siinä vaiheessa kun pitäisi saada graafinen käyttöliittymä omaan juttuun, tai johonkin muuhun simppeliin. :)

        Älkää silti ymmärtäkö väärin, olen kiitollinen avusta. Vihastuttaa vaan kun edes rahalla ei saa opasta joka paneutuisi noihin mainitsemiini asioihin ja tekisi opiskelusta motivoivaa. Ja saaattaahan olla että huomenna näen asiat toisinm tietystä syystä.. ;)

        PS. On muuten hyvä etä foxissa on oikoluku.. :P


      • Käärmes--
        snake python snake kirjoitti:

        Ainakaan näin ensialkuun oluen yhteydessä tätä katsottuna, en saanut tuota toimimaan mitenkään, linkin takaa löytyvän esimerkin kylläkin. Ainoa ongelma näissä ohjelmoinnin alkeissa onkin tämä, että ei tuo kovin inspiroivaa ole saada ikkuna joka huutelee jotain tai sallii drag & dropin ilman mitään varsinaista toiminnetta. Eli jos yhden rivin komentorivi komento on niin vaikea toteuttaa että vaatisi pitkän opiskelun, niin syö miestä. Mitään ihmettä en toki odottanutkaan, mutta oletin että olisi kohtuu helppo tehdä GUI joka suorittaa yhden komentosarjan ja tunnistaa että ikkunaan raahatut & siinä vielä jälkikäteen uudelleen järjestetyt tiedostot tunnistuvat siten, että ylin on tiedosto1 siitä seuraava tioedosto2 jne.

        Tämä siis itselläni se suurin hidaste ohjelmoinnin opiskelussa. Osaan C:n alkeitakin paaljon enemmän kuin pythonia, joskin niitä pitäisi palauttaa muistiinkin. Mutta sama ongelma nousee aina esille. Se GUI on niin hankala, kuten tämä yhden rivin esimerkki osoittaa..

        Kuten ekassa esimerkissä annettu juttu menisi kaiketi komennolla:

        cat video1.mpg video2.mpg | ffmpeg -f mpeg -i - -vcodec copy -acodec copy video.mpg

        Samaan GUI ja olet tehnyt noita loputtoman määrän command linen kautta. Itselleni command line ei ole siis este, mutta olisi tosiaan motivoivaa jos saisi edes yksinkertaisen jutun jotenkin tehtyä. No ehkä syytä antaa asian vaan olla, en todellakaan jaksa opiskella pythonia että taidot olisivat edes sillä tasolla kuin taannoin C suhteen olivat (siis alkeet), vain todetakseni että oppaat jättävät oman onnen nojaan siinä vaiheessa kun pitäisi saada graafinen käyttöliittymä omaan juttuun, tai johonkin muuhun simppeliin. :)

        Älkää silti ymmärtäkö väärin, olen kiitollinen avusta. Vihastuttaa vaan kun edes rahalla ei saa opasta joka paneutuisi noihin mainitsemiini asioihin ja tekisi opiskelusta motivoivaa. Ja saaattaahan olla että huomenna näen asiat toisinm tietystä syystä.. ;)

        PS. On muuten hyvä etä foxissa on oikoluku.. :P

        Vertaa nyt eri asioita: CLI:n käyttöä versus GUI-ohjelmointi. Järkevämpää olisi CLI:n käyttö vs. GUI:n käyttö tai CLI-ohjelmointi vs. GUI-ohjelmointi.

        GUI-ohjelmoinnissa on aika lailla "turhaa" duunia kun käyttäjän mielivaltaiset hiirellä sorkkimiset pitää ottaa huomioon (tai jättää huomiotta).

        CLI-ohjelmoinnissa taas (mielivaltainen) tekstisyöte pitää käsitellä. Onneksi on valmiita apuvälineitä esim. Pythonissa getopt-moduuli:
        http://www.faqs.org/docs/diveintopython/kgp_commandline.html

        (Vastaava tietysti löytyy muistakin kielistä.)


      • Käärmes--
        Käärmes-- kirjoitti:

        Vertaa nyt eri asioita: CLI:n käyttöä versus GUI-ohjelmointi. Järkevämpää olisi CLI:n käyttö vs. GUI:n käyttö tai CLI-ohjelmointi vs. GUI-ohjelmointi.

        GUI-ohjelmoinnissa on aika lailla "turhaa" duunia kun käyttäjän mielivaltaiset hiirellä sorkkimiset pitää ottaa huomioon (tai jättää huomiotta).

        CLI-ohjelmoinnissa taas (mielivaltainen) tekstisyöte pitää käsitellä. Onneksi on valmiita apuvälineitä esim. Pythonissa getopt-moduuli:
        http://www.faqs.org/docs/diveintopython/kgp_commandline.html

        (Vastaava tietysti löytyy muistakin kielistä.)

        Jaa, argparse-modulia suositellaan ja pitäisi olla parempi Pythonilla:

        http://docs.python.org/library/argparse.html#module-argparse


      • testi
        sssswww kirjoitti:

        Oho, täytyy sanoa että yllätys oli suuri kun molemmat tavat meni läpi.. jatketaan sitten samalla linjalla ja kokeillaan käyttää välilyöntejä sisennyksenä entityinä

        def hello():
            print 'Hello, World!'

        hello()

        Testi
        def fubar():
        print >>sys.stderr, "FUBAR"
        fubar()


      • testi
        testi kirjoitti:

        Testi
        def fubar():
        print >>sys.stderr, "FUBAR"
        fubar()

        #!/usr/bin/env python
        # -*- coding: utf-8 -*-

        def main():
            # google
            print "Hello, World!"
                
        if __name__ == '__main__':
            main()
        TEEEEESTI


    • ghfjutfuk

    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Katso: Ohhoh! Miina Äkkijyrkkä sai käskyn lähteä pois Farmi-kuvauksista -Kommentoi asiaa: "En ole.."

      Tämä oli shokkiyllätys. Oliko tässä kyse tosiaan siitä, että Äkkijyrkkä sanoi asioita suoraan vai mistä.... Tsemppiä, Mi
      Tv-sarjat
      135
      5559
    2. Voi kun mies rapsuttaisit mua sieltä

      Saisit myös sormiisi ihanan tuoksukasta rakkauden mahlaa.👄
      Ikävä
      33
      3425
    3. Haluan jutella kanssasi Nainen

      Olisiko jo aika tavata ja avata tunteemme...On niin paljon asioita joihin molemmat ehkä haluaisimme saada vastaukset...O
      Ikävä
      17
      1893
    4. Poliisiauto Omasp:n edessä parkissa

      Poliisiauto oli parkissa monta tuntia Seinäjoen konttorin edessä tänään. Haettiinko joku tai jotain pankista tutkittavak
      Seinäjoki
      23
      1865
    5. Onko mies niin,

      että sinulle ei riitä yksi nainen? Minulle suhde tarkoittaa sitoutumista, tosin eihän se vankila saa olla kummallekaan.
      Tunteet
      24
      1720
    6. Voitasko leikkiä jotain tunnisteleikkiä?

      Tietäisi ketä täällä käy kaipaamassa.. kerro jotain mikä liittyy sinuun ja häneen eikä muut tiedä. Vastaan itsekin kohta
      Ikävä
      73
      1548
    7. Tietysti jokainen ansaitsee

      Hän varmasti ansaitsee vain parasta ja sopivinta tietenkin, suon sen onnen hänelle enemmän kuin mielelläni. Aika on nyt
      Ikävä
      14
      1463
    8. Armi Aavikko Malmin hautausmaa

      Haudattiinko Armi arkussa Malmin hautausmaalle vai tuhkattiinko hänet? Kuka tietää asiasta oikein?
      Kotimaiset julkkisjuorut
      11
      1346
    9. Haluisin suudella ja huokailla

      ja purra kaulaasi ja rakastella sinua. Haluisin puristella rintojasi ja pakaroitasi. Ei sinulla taida olla kuitenkaan ni
      Ikävä
      16
      1337
    10. Miksi näin?

      Miksi vihervassut haluaa maahan porukkaa jonka pyhä kirja kieltää sopeutumisen vääräuskoisten keskuuteen? Näin kotoutumi
      Maailman menoa
      23
      1308
    Aihe