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.
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()
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
Deschidem folderul cu terminalul, în cazul meu folosesc Nemo de la Linux Mint 14.
Pentru compilare plasăm python gui.py în terminal
vezi imaginea.
Acum putem vedea noul nostru mic program sau widget creat cu bibliotecile PyGTK 3
Este o fereastră simplă cu două butoane.
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.
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.
Î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 :'(
Excelent pentru cei dintre noi care folosesc Python :D!
Salutări!
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.
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.
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).
Elio vorbim despre WordPress. Implementat pe blog Desde Linux. Nu are funcțiile de a colora literele postărilor.
Oh, îmi pare rău.
Naaa emacs este confortabil pentru cei care au 84 de degete XD..., oameni normali, textmate, sublimetext sau notepad++ xd
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).
Foarte misto tutorial. Dar apropo, codul sursă python nu este compilat, este un limbaj interpretat.
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.
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ă.
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.
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!
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.
Î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.
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
: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ă.
terminând cu bretele de închidere, îmi face mult mai lizibilă XD..
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.
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.
Apropo, cu două priviri, acel cod este ușor de înțeles xD
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.
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 😀
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ă.
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 😉
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.
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ă.
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.
Pentru a programa cu python recomand să folosiți Eclipse cu pluginul PyDev sau Pychar m
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...
Sunt nou în PyGTK, este posibil să interacționez cu scripturile shell în acest limbaj?
Vă mulțumim pentru tutorial.
Salutări.