PyGTK 3: mini tutorial GUI cu Python + GTK + 3

Să facem un mic program cu PyGTK 3.0 care funcționează și pentru PyGTK 3.4. Această mică GUI vă va învăța cum să împărțiți un program în două sau mai multe fișiere.

Puteți vizita tutorialul lui Sebastian Pölsterl despre noul PyGTK 3, aici este noul tutorial, vă las linkul:

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

Acesta este blogul lui Sebastian.

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

O critică la adresa acestui tutorial a lui Sebastian este că nu învață cum să împarți un program în părți sau în mai multe fișiere, ar fi fost bine dacă ar fi arătat un exemplu despre cum să o faci cu PyGTK 3.

Toate programele mari și complexe sunt împărțite în multe fișiere și chiar și fișierele sunt plasate în alte directoare, adică sunt localizate în foldere diferite.

Să începem cu un mic exemplu:

Aici las codul scrierii intr-un singur fisier numit gui.py. Deschidem editorul de text Gedit sau editorul pe care îl folosim cel mai mult, copiem codul de mai jos și îl salvăm ca gui.py

din gi.repository import Gtk class gui(): def on_open_clicked(self, button): print „S-a făcut clic pe butonul \"Open\" def on_close_clicked(self, button): printează „Închiderea aplicației” Gtk.main_quit() 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. buton = Gtk.Button(label='Deschidere') self.button.connect("clicked", self.on_open_clicked) self.box.pack_start(self.button, True, True, 0) self.button = Gtk.Button( label='Închidere') 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()

fronton

def on_open_clicked(self, button): printează „Butonul \"Deschidere\" a fost făcut clic”

Este o funcție care se activează în terminal atunci când facem clic pe butonul de deschidere. Semnalul de activare este:

self.button.connect("clicked", self.on_open_clicked) def on_close_clicked(self, button): print "Închiderea aplicației" Gtk.main_quit()

Este o funcție care se activează atunci când facem clic pe butonul de închidere.

închidem programul pe care îl rulăm.

semnalul de activare este

self.button.connect("clicked", self.on_close_clicked) din gi.repository import Gtk ### invocăm bibliotecile PyGTK ### class gui(): ### definiția clasei numită gui este clasa principală # ##

Declarație Widgets: un widget este un program predeterminat de bibliotecile de interfață grafică pe care le folosim. De exemplu, un widget este un buton, o fereastră, o casetă etc. Acestea sunt widget-urile pe care le declarăm în programul nostru.

self.window = Gtk.Window() ### fereastra ### self.box = Gtk.Box() ### caseta #### self.button = Gtk.Button(label='Open') ### # butonul de deschidere #### self.button = Gtk.Button(label='Închidere') #### butonul de închidere #### self.window.add(self.box) #### caseta este conținută în fereastra numită fereastra #### self.box.pack_start(self.button, True, True, 0) ##### butonul este conținut în caseta numită box ### self.window.show_all() ## # arată întreaga fereastră ### gui = gui() ### creați un obiect gui ####

Am plasat programul nostru într-un folder numit simplu în cazul nostru pe desktop

Fert

Deschidem folderul cu terminalul, în cazul meu folosesc Nemo de la Linux Mint 14.

închis

Pentru compilare plasăm python gui.py în terminal

vezi imaginea.

terminal

Acum putem vedea noul nostru mic program sau widget creat cu bibliotecile PyGTK 3

Este o fereastră simplă cu două butoane.

Fără titlu

Acum împărțim programul în trei părți, mai jos vă las codul celor trei fișiere.

Primul fișier gui.py

din gi.repository import Gtk din destroy import distrugere din io import io class gui(destroy ,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()

Al doilea fișier io.py

clasa io: def on_open_clicked(self, button): printează „Butonul \"Deschidere\" a fost făcut clic”

Al treilea fișier destroy.py

din gi.repository import Gtk class destroy: def on_close_clicked(self, button): print "Închiderea aplicației" Gtk.main_quit()

Am plasat cele trei fișiere în același folder în cazul nostru, folderul se numește simplu divizat.

simplu

Pentru a compila cele trei fișiere. Deschidem folderul cu terminalul și pur și simplu îl plasăm înapoi în terminal

python gui.py

Modificări aduse codului gui.py

from destroy import destroy ### instrucțiune pentru a importa fișierul nostru destroy.py ### din io import io ### instrucțiune pentru a importa fișierul nostru io.py ### class gui(destroy ,io ): #### ala class main adăugăm subclasele destroy și io ####

Puteți vedea că propoziția

def on_open_clicked(self, button): printează „Butonul \"Deschidere\" a fost făcut clic”

Nu este în gui.py, este în fișierul io.py

Sentință

def on_close_clicked(self, button):

tipăriți „Închiderea aplicației”
Gtk.main_quit()

Acesta se află în fișierul destroy.py

Astfel putem împărți un program în mai multe fișiere aflate în directoare diferite în același timp.

Pe de altă parte, Python este un pilon al software-ului liber și este adaptat să funcționeze cu GTK 3.6 /3.8, numele său este PyGTK. Adaptarea lui Python pentru KDE se numește PyQT.

Python este adaptat pentru Mac OS și WINDOWS.

Sper că acest mini tutorial PyGTK3 v-a fost util. Puteți face toate criticile constructive pe care le doriți.

Mai știu ceva despre Gtk 3.4/3.6 și Vala GTK 3.4/3.6.

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

În cele din urmă, îmi pare rău utilizatorilor KDE pentru că nu au făcut un mini tutorial pentru KDE.


Lasă comentariul tău

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *

*

*

  1. Responsabil pentru date: Miguel Ángel Gatón
  2. Scopul datelor: Control SPAM, gestionarea comentariilor.
  3. Legitimare: consimțământul dvs.
  4. Comunicarea datelor: datele nu vor fi comunicate terților decât prin obligație legală.
  5. Stocarea datelor: bază de date găzduită de Occentus Networks (UE)
  6. Drepturi: în orice moment vă puteți limita, recupera și șterge informațiile.

  1.   Putreze87 el a spus

    În KDE prefer să folosesc kdevelop (cred că așa se numește) pentru a crea interfața cum îmi place, dar încă îmi este greu să găsesc procesele pentru a face acest lucru :'(

  2.   st0rmt4il el a spus

    Excelent pentru cei dintre noi care folosesc Python :D!

    Salutări!

  3.   Pablo el a spus

    Bună ziua, urmăresc această comunitate de multă vreme și nu prea sunt sigur dacă este prima dată când comentez sau am mai făcut-o 😀 (nu sunt foarte dat să scriu comentarii la web, sincer). Chestia este că o fac pentru a lăsa o sugestie lui Elav și KZKG^Gaara ca administratori și cred că ar fi o idee bună să adaug un plugin pentru colorarea sintaxelor acum că în ultima vreme văd mai multe postări cu cod în diferite limbaje de programare. Știu că există destul de multe plugin-uri, dar nu am încercat niciunul deoarece nu sunt utilizator WordPress, așa că vă voi lăsa să vă gândiți la viabilitatea solicitărilor. Profit de această ocazie pentru a-i întreba pe ceilalți cititori ce părere au despre idee, pentru că știu că există oameni care preferă să citească codul fără nicio înfrumusețare. Îmi cer scuze dacă acest lucru a fost deja discutat aici și a fost respins dintr-un motiv oarecare, deoarece nu-mi amintesc să fi văzut vreo discuție pe acest subiect.

    1.    marianogaudix el a spus

      Sincer, aș dori să am opțiunea de a colora sintaxa pentru a evidenția codul limbajelor de programare.
      Acest lucru ar ajuta utilizatorii care doresc să învețe limbaje de programare.

      Dar hei, mă simt confortabil și cu forumul și că putem discuta și învăța unul de la celălalt.

      1.    eliotime3000 el a spus

        GNU Emacs este mai convenabil, deoarece cel puțin trebuie să alegi cu ce verificator de limbaj de programare vrei să lucrezi (dacă nu vrei mai multă greutate pentru procesorul tău, folosește GNU Nano și bucură-te de minimalism la maxim).

        1.    marianogaudix el a spus

          Elio vorbim despre WordPress. Implementat pe blog Desde Linux. Nu are funcțiile de a colora literele postărilor.

          1.    eliotime3000 el a spus

            Oh, îmi pare rău.

        2.    pandev92 el a spus

          Naaa emacs este confortabil pentru cei care au 84 de degete XD..., oameni normali, textmate, sublimetext sau notepad++ xd

          1.    eliotime3000 el a spus

            Lucrul neplauzibil este că nu ați învățat tastarea, ceea ce este necesar pentru a gestiona bine GNU Emacs și comenzile rapide de la tastatură. În plus, GUI-ul său vă ajută să utilizați meniurile sale (poate fi folosit în Windows, dar nu este recomandat să o faceți cu modul normal, ci cu modul prompt de comandă pentru ca win32 să nu vă boicoteze scriptul).

  4.   Criticastru el a spus

    Foarte misto tutorial. Dar apropo, codul sursă python nu este compilat, este un limbaj interpretat.

    1.    giskard el a spus

      Poate fi compilat în pseudo-cod. Nu este limbajul mașină, ci octeții care reprezintă ceva pentru interpret, dar procesul se numește și compilat. În acest sens se poate spune că ceva este compilat.

  5.   hty el a spus

    Poate că este mai bine să înveți pytgk2 deoarece cea mai recentă versiune disponibilă pentru Windows este 2.24. Seria 3 este remarcabilă prin absența sa. Și limbile rele spun că gnome sparge toate API-urile în fiecare versiune nouă.

    1.    marianogaudix el a spus

      Programez machete cu GTK 3.4 / 3.6 și adevărul este că îți sparg răbdarea și capul, trebuie să rescrii codul, acum înțeleg de ce cei de la Linux Mint se plâng de GTK și de proiectul GNOME.
      Sunt de acord cu cei de la MINT cu GTK 2.4 acest lucru nu s-a întâmplat.

  6.   Carlos el a spus

    Bun tutorial și referințe.
    Doar un detaliu, deoarece codul a fost introdus, indentările în Python sunt obligatorii și trebuie respectate în exemplul de cod.

    Salutări!

    1.    marianogaudix el a spus

      Iti poti explica in ce constau identificarile obligatorii in Python?Adevar va spun,nu auzisem niciodata asta.Doar ca nu sunt obisnuit cu forumurile PyGTK 2/3 in engleza si poate am trecut cu vederea.

      1.    giskard el a spus

        În Python, acoladele nu sunt folosite ca în C sau blocurile de început/sfârșit ca în Pascal, ci totul este înțeles prin indentarea pe care o dați codului. Adică blocurile sunt recunoscute prin indentare. Este o caracteristică pe care o iubesc în mod deosebit. Eviți să scrii chei și chestii de genul ăsta.

        1.    pandev92 el a spus

          Nu imi place asta, mi se pare mai simplu sa pui doua chei sau un std::endl;, decat sa vezi daca linia este corect tabulata xd

          1.    felipe el a spus

            :p profesorul tau de programare iti va da 0. Sau mai rău, te vor concedia de la serviciu. Ceea ce contează cel mai mult este că codul este lizibil cu tot ceea ce implică.

          2.    pandev92 el a spus

            terminând cu bretele de închidere, îmi face mult mai lizibilă XD..

          3.    giskard el a spus

            Oh, chiar aşa???


            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);}

            Vezi? Fără indentări nu se înțelege prea bine. Și asta e una ușoară. Cu unul mai complex, doar compilatorul îl înțelege. Chestia este că, din moment ce TREBUIE să indentați oricum (pentru ca oamenii să înțeleagă codul), de ce ați fi redundant și ați folosi separatori? Doar indentare și atât.

          4.    pandev92 el a spus

            Bineînțeles că nu se înțelege nimic, pentru că nu respectați regulile de bună scriere ale unui program c/c++. Ceea ce ai făcut este valabil pentru orice, cum ar fi imbricarea unei funcții, în interiorul unei funcții în interiorul unei alte funcții care este în interiorul alteia, atunci vreau să te văd xd dacă ești capabil să înțelegi.

          5.    pandev92 el a spus

            Apropo, cu două priviri, acel cod este ușor de înțeles xD

          6.    giskard el a spus

            Am făcut ceea ce am făcut intenționat pentru a vă arăta că fără indentare, deși se compilează, este extrem de greu de înțeles orice cod. Deci aveți 2 reguli: Indentați și închideți cu delimitatori. Dar asta este redundant. În Python, codul ca acesta pur și simplu nu este acceptat de interpret. Și ai o singură regulă: indentarea. Uşor.
            Dar hei, fiecare după gusturile lui.

          7.    Atheyus el a spus

            Ambele sunt bune, cele indentate și cele neindentate, după părerea mea le prefer pe cele stil punct și virgulă sau rubin, asemănătoare cu pitonul dar indentația nu este necesară.

            Asta e mai de inteles :P:

            echo '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 opțiune %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);}' | perl -p -e 's/\{/\{\n\t/g;s/\;/\;\n\t/g;s/\t\}/\}/g;'

            Salutări 😀

      2.    giskard el a spus

        Cred că Carlos se referă la faptul că acolo unde apare codul nu există indentări. Asta cu copy&paste pur și simplu nu va funcționa. Nu știu dacă la crearea unei postări eticheta există pentru a introduce codul de limbă. Ar fi bine să-l pună dacă nu există.

        1.    giskard el a spus

          Am văzut deja care este problema: Tag CODE elimină toate spațiile și filele (nu ar trebui să facă asta!!!) Dar dacă pun un nbsp atunci codul arată bine. A0 în hex (160 în dec) deși cred că ar putea depinde de font (nu știu). Daca este folosit, iese asa:

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

          La testele mele arata bine, dar nu am o previzualizare cand postez raspunsuri (si ar trebui sa fie asta!!!) Daca nu apare nu este vina mea 😉

          1.    marianogaudix el a spus

            Uită-te la exemplele pe care Sebastian Pölsterl le dă în tutorialul său PyGTK 3, Sebastian nu pune etichete.

            Exemplu:

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

            Puteți vedea întregul tutorial al lui Sebastian.

          2.    giskard el a spus

            Nu stiu la ce te referi. Ceea ce spun este că aici, în postări, nu se poate folosi eticheta HTML „COD” pentru ca ceea ce ai pus ca cod să iasă bine indentat. Pe pagina la care te referi, dacă vezi sursele paginii, vei vedea că nu folosește CODE ci folosește alți delimitatori HTML.
            Nu este împotriva codului pe care l-ați postat, ci mai degrabă subliniază o defecțiune în sistemul de postare al acestui site. Pe care, poate, administratorii o pot rezolva.
            Când vorbesc despre etichete, vorbesc, evident, despre HTML, nu despre Python. În orice caz, dacă puneți cod neindentat în Python, pur și simplu nu va funcționa. Dacă vine un începător și copiază codul așa cum apare în această postare și încearcă să-l ruleze, acesta va eșua. Poate ești frustrat pentru că ești începător. Încă o dată, nu e vina ta; și în răspunsul meu imediat anterior ceea ce am făcut a fost să ofer o modalitate de a rezolva problema de la nivelul utilizatorului-care-postează.

          3.    marianogaudix el a spus

            Ai perfecta dreptate, ar fi trebuit sa incarc fotografii in loc sa copiez codul.
            pentru a arăta cum sunt ordonate corect instrucțiunile în PyGTK 3.

  7.   felipe el a spus

    Pentru a programa cu python recomand să folosiți Eclipse cu pluginul PyDev sau Pychar m

  8.   Louis el a spus

    După cum am menționat mai sus, tocmai de aceea nu îmi place Python, din cauza problemei de indentare. După cum am văzut, copierea și lipirea nu va funcționa, ceea ce nu se întâmplă cu alte limbaje precum C, Java, PHP etc.

    În ceea ce privește lizibilitatea, aplicăm un înfrumusețator de cod (cum ar fi http://indentcode.net/ ) și gata,

    Urâtul se poate repara, dar dacă nu există indentare și logica este alterată, sunăm...

  9.   Carlos el a spus

    Sunt nou în PyGTK, este posibil să interacționez cu scripturile shell în acest limbaj?

    1.    Alo el a spus

      Vă mulțumim pentru tutorial.

      Salutări.