PyGTK 3: mini GUI oktatóanyag Python + GTK + 3 alkalmazással

Készítünk egy kis programot a PyGTK 3.0-val a PyGTK 3.4-hez is. Ez a kis grafikus felhasználói felület megtanítja, hogyan kell felosztani a programot két vagy több fájlra.

Meglátogathatja Sebastian Pölsterl oktatóanyagát az új PyGTK 3-ról, itt van az új oktatóanyag, otthagyom a linket:

http://python-gtk-3-tutorial.readthedocs.org/en/latest/index.html

Ez Sebastian blogja.

http://k-d-w.org/node/88

Sebastian ezt a bemutatót kritizálja, hogy az nem tanítja meg, hogyan kell egy programot részekre vagy több fájlra osztani, jó lett volna, ha példát mutat be arra, hogyan kell a PyGTK 3-mal csinálni.

Minden nagy és összetett program sok fájlra van felosztva, és a fájlokat még más könyvtárakba is beillesztik, vagyis különböző mappákban helyezkednek el.

Kezdjük a kis példával:

Itt található az írókód egyetlen fájlban, a gui.py néven. Megnyitjuk a Gedit szövegszerkesztőt vagy az általunk leggyakrabban használt szerkesztőt, átmásoljuk az alábbi kódot, és elmentjük gui.py néven

from gi.repository import Gtk class gui (): def on_open_clicked (self, button): print "\" Open \ "button was clicked" def on_close_clicked (self, button): print "Bezáró alkalmazás" print Gtk.main_quit () def __init__ (én): self.window = Gtk.Window () self.window.connect ('delete-event', Gtk.main_quit) self.box = Gtk.Box () self.window.add (self.box) self. button = Gtk.Button (label = 'Open') self.button.connect ("clicked", self.on_open_clicked) self.box.pack_start (self.button, True, True, 0) self.button = Gtk.Button ( label = 'Bezárás') self.button.connect ("clicked", self.on_close_clicked) self.box.pack_start (self.button, True, True, 0) self.window.show_all () Gtk.main () if __name__ == '__main__': gui = gui ()

oromzat

def on_open_clicked (self, button): print "\" Open \ "gombra kattintottak"

Ez egy olyan funkció, amely akkor aktiválódik a terminálban, amikor a megnyitás gombra kattintunk. A jel az aktiválásához:

self.button.connect ("clicked", self.on_open_clicked) def on_close_clicked (self, button): print "Bezáró alkalmazás" Gtk.main_quit ()

Ez egy olyan funkció, amely akkor aktiválódik, amikor a bezárás gombra kattintunk.

zárja be a futtatott programot.

a jel az aktiválásához

self.button.connect ("clicked", self.on_close_clicked) from gi.repository import Gtk ### meghívjuk a PyGTK könyvtárakat ### class gui (): ### gui nevű osztálydefiníció a fő osztály # ##

Widgetek deklarálása: a widgetek egy olyan program, amelyet az általunk használt GUI könyvtárak határoznak meg. Például egy widget egy gomb, egy ablak, egy doboz stb. Ezeket a widgeteket deklaráljuk a programunkban.

self.window = Gtk.Window () ### window ### self.box = Gtk.Box () ### box #### self.button = Gtk.Button (label = 'Open') ### # nyitógomb #### self.button = Gtk.Button (label = 'Close') #### close button #### self.window.add (self.box) #### a doboz a a window #### self.box.pack_start (self.button, True, True, 0) nevű ablak ##### a gombot a ### self.window.show_all () ## mező neve tartalmazza # az egész ablakot megmutatjuk ### gui = gui () ### létrehoz egy gui objektumot ####

A programunkat az asztalunkon egyszerűnek nevezett mappába helyezzük

termékeny

Megnyitjuk a mappát a terminállal, esetemben a Nemot használom a Linux Mint 14-ből.

zárva

A fordításhoz beletesszük a python gui.py terminált

lásd a képet.

terminál

Most láthatjuk a PyGTK 3 könyvtárakkal létrehozott kis programunkat vagy új widgetünket

Ez egy egyszerű ablak, két gombbal.

Névtelen

Most három részre osztjuk a programot, majd meghagyom a három fájl kódját.

Első gui.py fájl

a gi.tárból import Gtk a megsemmisítésből megsemmisítés az io importból io import go (megsemmisítés, io): def __init __ (self): self.window = Gtk.Window () self.window.connect ('delete-event', Gtk .main_quit) self.box = Gtk.Box () self.window.add (self.box) self.button = Gtk.Button (label = 'Open') self.button.connect ("clicked", self.on_open_clicked) self.box.pack_start (self.button, True, True, 0) self.button = Gtk.Button (label = 'Close') self.button.connect ("clicked", self.on_close_clicked) self.box.pack_start ( self.button, True, True, 0) self.window.show_all () Gtk.main () if __name__ == '__main__': gui = gui ()

Második io.py fájl

class io: def on_open_clicked (self, button): print "\" Open \ "gombra kattintottak"

A harmadik fájl destr.py

from gi.repository import Gtk class destr: def on_close_clicked (self, button): print "Bezáró alkalmazás" Gtk.main_quit ()

A három fájlt esetünkben ugyanabba a mappába helyezzük, a mappát egyszerű osztottnak nevezzük.

egyszerű

A három fájl összeállításához. Megnyitjuk a mappát a terminállal, és egyszerűen visszatesszük a terminálba

python gui.py

A gui.py kód módosításai

a megsemmisítésből megsemmisítés ### utasítás a fájlunk importálásához a megsemmisítés.py ### az io importból io ### utasítás a fájlunk importálásához io.py ### class gui (megsemmisítés, io): #### osztályba fő hozzáadjuk a pusztító alosztályokat és io ####

Láthatja, hogy a mondat

def on_open_clicked (self, button): print "\" Open \ "gombra kattintottak"

Nincs a gui.py fájlban, hanem az io.py fájlban

Mondat

def on_close_clicked (saját, gomb):

print "Bezáró alkalmazás"
Gtk.main_quit ()

a destr.py fájlban található

Így feloszthatunk egy programot sok fájlra, amelyek különböző könyvtárakban találhatók egyszerre.

Másrészt a Python a szabad szoftver pillére, és a GTK 3.6 /3.8-mal való működésre van adaptálva, neve PyGTK. A Python KDE-hez való alkalmazkodását PyQT-nek hívják.

A Python Mac OS és WINDOWS rendszerekhez van adaptálva.

Remélem, hogy ez a PyGTK3 mini oktatóanyag hasznos volt az Ön számára. Minden konstruktív kritikát megfogalmazhatnak, amire vágynak.

Ismerek néhány Gtk 3.4 /3.6-ot és Vala GTK 3.4 / 3.6-ot is.

http://www.youtube.com/watch?v=9ckRn_sx8CE

Végül a KDE felhasználói elnézést kérnek azért, mert nem készítettek egy mini oktatóanyagot a KDE számára.


Hagyja megjegyzését

E-mail címed nem kerül nyilvánosságra. Kötelező mezők vannak jelölve *

*

*

  1. Az adatokért felelős: Miguel Ángel Gatón
  2. Az adatok célja: A SPAM ellenőrzése, a megjegyzések kezelése.
  3. Legitimáció: Az Ön beleegyezése
  4. Az adatok közlése: Az adatokat csak jogi kötelezettség alapján továbbítjuk harmadik felekkel.
  5. Adattárolás: Az Occentus Networks (EU) által üzemeltetett adatbázis
  6. Jogok: Bármikor korlátozhatja, helyreállíthatja és törölheti adatait.

  1.   rots87 dijo

    A kde-ben inkább a kdevelop-ot használom (azt hiszem, így hívják) a gui könnyű létrehozásához, de még mindig nehezen találom meg a folyamatokat, hogy megvalósuljon x dolog: '(

  2.   st0rmt4il dijo

    Remek nekünk, akik Python-ot használunk: D!

    Üdvözlet!

  3.   Pablo dijo

    Helló, régóta követem ezt a közösséget, és nem vagyok benne biztos, hogy ez az első alkalom, ha kommenteltem, vagy már korábban is megtettem 😀 (Nem igazán vagyok hajlandó kommenteket írni az internetre igazán). A helyzet az, hogy azért teszek, hogy javaslatot hagyjak Elav és a KZKG ^ Gaara rendszergazdáiként, és úgy gondolom, hogy jó ötlet lenne egy plugint hozzáadni a szintaxis színezéséhez, mivel mostanában több bejegyzést látok kóddal különböző programozási nyelveken. Tudom, hogy elég sok plugin van, de még egyet sem próbáltam ki, mivel nem vagyok WordPress felhasználó, ezért hagyom, hogy gondolkodjon a kérés életképességén. Megragadom az alkalmat, hogy megkérdezzem a többi olvasót, hogy mi a véleményük az ötletről, mert tudom, hogy vannak olyan emberek, akik szívesebben elolvassák a kódot mindenféle díszítés nélkül. Elnézést kérek, ha ezt itt már kommentálták, és valamilyen oknál fogva elutasították, mivel nem emlékszem, hogy vita történt volna a témában.

    1.    marianogaudix dijo

      Az az igazság, hogy szeretnék lehetőséget kapni a szintaxis színezésére a programozási nyelvek kódjának kiemelésére.
      Ez segítene azoknak a felhasználóknak, akik szeretnének megtanulni programozási nyelveket.

      De hé, én is jól érzem magam a fórummal, és hogy együtt tudunk beszélgetni és tanulni.

      1.    eliotime3000 dijo

        A GNU Emacs kényelmesebb, mivel legalább meg kell választania, hogy melyik programnyelv-ellenőrzőben szeretne dolgozni (ha nem akar nagyobb súlyt a processzorának, használja a GNU Nano-t, és élvezze a legjobbat a minimalizmusban).

        1.    marianogaudix dijo

          Az Elio WordPress-ről beszélünk. Megvalósítva a blogon Desde Linux. Nem rendelkezik azzal a funkcióval, hogy kiszínezze a bejegyzések betűit.

          1.    eliotime3000 dijo

            Ó, sajnálom.

        2.    92 dijo

          A Naaa emacs kényelmes azok számára, akiknek 84 ujja van XD .., normális emberek, szövegtárs, sublimetext vagy jegyzettömb ++ xd

          1.    eliotime3000 dijo

            A valószínűtlen dolog az, hogy nem tanultuk meg a gépelést, ami szükséges a GNU Emacs és a billentyűparancsok megfelelő kezeléséhez. Ezenkívül a grafikus felhasználói felülete megkönnyíti a menük használatát (használható a Windows rendszerben is, de nem ajánlott normál módban, hanem parancssoros üzemmóddal csinálni, hogy a win32 ne bojkottálja a szkriptet).

  4.   Rosszindulatú kritika dijo

    Nagyon jó bemutató. De egyébként a python forráskódja nincs lefordítva, hanem egy értelmezett nyelv.

    1.    giskard dijo

      Ál kódra fordítható. Nem a gépi nyelv, hanem a bájtok jelentenek valamit az értelmező számára, de a folyamatot fordítottnak is nevezzük. Ebben az értelemben azt lehet mondani, hogy valami össze van állítva.

  5.   hty dijo

    Talán jobb, ha megtanuljuk a pytgk2-t, mert a Windows számára elérhető legfrissebb verzió a 2.24. A 3. sorozat feltűnő hiánya miatt. És a rossz nyelvek azt mondják, hogy a gnóm minden új verzióban megtöri az összes apisot.

    1.    marianogaudix dijo

      Programozok egy modellt a GTK 3.4 / 3.6-mal, és az az igazság, hogy megtörik a türelmed és a fejed, át kell írnod ​​a kódot, most már értem, miért panaszkodnak a Linux Mint emberei a GTK-ra és a GNOME projektre.
      A MINT tagjaival egyetértek a GTK 2.4-el, ez nem történt meg.

  6.   Carlos dijo

    Jó bemutató és referenciák.
    Csak egy részlet, mivel a kódot beillesztették, a Pythonban a behúzások kötelezőek, és ezeket a példakódban be kell tartani.

    Üdvözlet!

    1.    marianogaudix dijo

      El tudnád magyarázni, miből állnak a Python kötelező azonosításai? Az igazat megvallva még soha nem hallottam ilyet. Rosszul vagyok hozzászokva a PyGTK 2/3 angol fórumaihoz, és talán figyelmen kívül hagyom.

      1.    giskard dijo

        A Pythonban nem használsz olyan kulcsokat, mint a C-ben, vagy a kezdő / befejező blokkokat, mint a Pascal-ban, de mindent a kód által megadott behúzáson keresztül értünk meg. Vagyis a blokkokat behúzottnak ismerik el. Ez egy olyan tulajdonság, amelyet különösen szeretek. Kerüli a kulcsok és hasonló dolgok írását.

        1.    92 dijo

          Csak nem tetszik ez, egyszerűbbnek tűnik két kis kulcsot vagy egy std :: endl; -t elhelyezni, mint látni, ha az xd sor jól van táblázva

          1.    Felipe dijo

            : p A programozó tanárod 0-t ad neked. Vagy ami még rosszabb, kirúgják a munkádból. Ami a legfontosabb, hogy a kód olvasható legyen mindazzal, ami azt implikálja

          2.    92 dijo

            záró zárójelekkel végződik, ez sokkal olvashatóbbá tesz engem XD ..

          3.    giskard dijo

            Komolyan???


            int main(int argc, char *argv[]){program_name = argv[0];while ((argc > 1) && (argv[1][0] == '-')) {switch (argv[1][1]) {case 'v':verbose = 1; break;case 'o':out_file = &argv[1][2];break;case 'l':line_max = atoi(&argv[1][2]);break;default:fprintf(stderr,"Bad option %s\n", argv[1]);usage();}++argv;--argc;} if (argc == 1) {do_file("print.in");} else {while (argc > 1) {do_file(argv[1]);++argv;--argc;}}return (0);}

            Látod? Behúzások nélkül nem nagyon érthető. És ez könnyű. Bonyolultabbnál csak a fordító érti meg. A helyzet az, hogy mivel Önnek egyébként is behúzódnia kell (hogy az emberek megértsék a kódot), miért lenne felesleges és használna elválasztókat? Elég behúzással és ennyi.

          4.    92 dijo

            Természetesen semmit nem értenek, mert nem tartják be a jó írás szabályait egy c / c ++ programban. Amit tettél, mindenre érvényes, például egy funkció beágyazására, egy olyan funkció belsejében, amely egy másik függvényben van, ami egy másikban van, akkor látni akarlak xd-t, ha képes megérteni.

          5.    92 dijo

            egyébként két megjelenéssel ez a kód könnyen érthető xD

          6.    giskard dijo

            Amit tettem, azt szándékosan tettem, hogy megmutassam neked, hogy behúzás nélkül, bár összeáll, rendkívül nehéz megérteni egyetlen kódot sem. Tehát 2 szabálya van: Behúzás és átfogás a határolókkal. De ez felesleges. A Pythonban az ilyen kódot egyszerűen nem fogadja el a tolmács. És csak egy szabályod van: Behúzás. Könnyen.
            De hát, mindenki az ízlésével.

          7.    Atheyus dijo

            Mindkettő jó, behúzott és nem behúzott, véleményem szerint a pontosvesszőt vagy rubint preferálom, hasonlóan a pythonhoz, de a behúzás nem szükséges.

            Így lehet jobban megérteni: P:

            echo 'int main (int argc, char * argv []) {programnév = argv [0]; míg ((argc> 1) && (argv [1] [0] ==' - ')) {switch (argv [ 1] [1]) {v eset: verbózus = 1; break; case 'o': out_file = & argv [1] [2]; break; case 'l': line_max = atoi (& argv [1] [2]); break; alapértelmezett: fprintf (stderr, »Rossz opció % s \ n », argv [1]); use ();} ++ argv; –argc;} if (argc == 1) {do_file (" print.in ");} else {while (argc> 1 ) {do_file (argv [1]); ++ argv; –argc;}} return (0);} '| perl -p -e 's / \ {/ \ {\ n \ t / g; s / \; / \; \ n \ t / g; s / \ t \} / \} / g;'

            Üdvözlet 😀

      2.    giskard dijo

        Szerintem Carlos azt jelenti, hogy ahol a kód kijön, ott nincs behúzás. A másolás és beillesztés csak nem fog működni. Nem tudom, hogy létezik-e a címke poszt létrehozásakor a nyelvi kód megadásához. Jó lenne, ha megfogalmaznák, ha nem létezik.

        1.    giskard dijo

          Már láttam, hogy mi a probléma: a CODE Tag eltávolítja az összes szóközt és fület (ezt nem szabad !!! A0 hexában (160 dec.), Bár azt hiszem, ez a betűtípustól függ (nem tudom) Ha használják, akkor így jön ki:

          def fib(n):
              a, b = 0, 1
              while a < n:
                  print(a)
                  a, b = b, a+b

          Hogy a tesztjeimen jól néz ki, de nincs előzetesem, amikor válaszokat teszek fel (és ennek lennie kell !!!) Ha nem jön ki, akkor nem az én hibám

          1.    marianogaudix dijo

            Nézze meg azokat a példákat, amelyeket Sebastian Pölsterl a PyGTK 3 oktatóanyagában bemutat, Sebastian nem helyez el címkéket.

            Példa :

            http://python-gtk-3-tutorial.readthedocs.org/en/latest/entry.html#example

            láthatja Sebastian összes oktatóanyagát.

          2.    giskard dijo

            Nem tudom, mire gondolsz. Azt mondom, hogy itt, a bejegyzésekben, nem lehet használni a "CODE" HTML címkét úgy, hogy amit kódként tesz be, az jól behúzódna. A hivatkozott oldalon, ha látja az oldal forrásait, látni fogja, hogy nem a CODE-t használja, hanem más HTML-elválasztókat használ.
            Nem ellentétes az Ön által betöltött kóddal, hanem rámutat egy hibára a webhely feladásának rendszerében. Amit talán az adminok kijavíthatnak.
            Amikor címkékről beszélek, nyilván a HTML-ről beszélek, nem pedig a Python-ról. Mindenesetre, ha behúzás nélküli kódot tesz be a Pythonba, az egyszerűen nem fog működni. Ha jön egy újonc és lemásolja a kódot, amint az megjelenik ebben a bejegyzésben, és megpróbálja futtatni, akkor nem fog sikerülni. Lehet, hogy csalódott vagy, mivel újszülött vagy. Ismét a hiba nem a tiéd; és az előző korábbi válaszomban azt tettem, hogy módot adtam a probléma megoldására a felhasználó-ki-hozzászólás szintjén.

          3.    marianogaudix dijo

            Teljesen igazad van, a kód másolása helyett fényképeket kellett volna feltöltenem.
            annak bemutatására, hogy a PyGTK 3-ban hogyan rendezik az utasításokat megfelelően.

  7.   Felipe dijo

    A python programozásához ajánlom az Eclipse használatát a PyDev pluginnel vagy a Pychar m-mel

  8.   Louis dijo

    Mint fent említettük, ezért nem szeretem a pitont a mélyedések miatt. Mint láttuk, a másolás és beillesztés nem fog működni, ami más nyelvekkel, például C, Java, PHP stb.

    Az olvashatóság dolog, alkalmazunk egy kódszépítőt (például http://indentcode.net/ ) és kész,

    A csúnya fix, de ha nincs behúzás és a logika megváltozik, akkor hangot adunk ..

  9.   Carlos dijo

    Új vagyok a PyGTK-ban, lehet-e kölcsönhatásba lépni a shell szkriptekkel ezen a nyelven?

    1.    Helló dijo

      Köszönöm a bemutatót.

      Üdvözlet.