PyGTK 3: Mini GUI Tutorial mat Python + GTK + 3

Mir maachen e klenge Programm mat PyGTK 3.0 deen och fir PyGTK 3.4 funktionnéiert. Dës kleng GUI léiert Iech wéi Dir e Programm an zwee oder méi Dateien deelt.

Dir kënnt de Sebastian Pölsterl Tutorial op den neie PyGTK 3 besichen, hei ass deen neien Tutorial, ech verloossen de Link:

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

Dëst ass dem Sebastian säi Blog.

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

Eng Kritik un dësem Tutorial vum Sebastian ass datt et net léiert wéi een e Programm an Deeler oder an e puer Dateien deelt, et wier gutt gewiescht wann hien e Beispill géif weisen wéi et mam PyGTK 3 geet.

All grouss a komplex Programmer sinn a vill Dateie gedeelt an d'Dateie ginn esouguer an aner Verzeechnes gesat, dat heescht, se sinn a verschiddene Classeure lokaliséiert.

Loosst eis mam klenge Beispill ufänken:

Hei ass de Schreifcode an enger eenzeger Datei mam Numm gui.py. Mir öffnen den Gedit Texteditor oder den Editor deen mir am meeschten benotzen, mir kopéieren de Code hei ënnen a späicheren en als gui.py

vum gi.repository Import Gtk Klass gui (): def on_open_clicked (selwer, Knäppchen): dréckt "\" Open \ "Knäppchen gouf geklickt" def on_close_clicked (selwer, Knäppchen): dréckt "Ofschlossapplikatioun" Gtk.main_quit () def __init__ (selwer): self.window = Gtk.Window () self.window.connect ('läschen-event', Gtk.main_quit) self.box = Gtk.Box () self.window.add (self.box) selwer. Knäppchen = Gtk.Button (label = 'Open') self.button.connect ("geklickt", self.on_open_clicked) self.box.pack_start (self.button, True, True, 0) self.button = Gtk.Button ( label = 'Close') self.button.connect ("geklickt", self.on_close_clicked) self.box.pack_start (self.button, True, True, 0) self.window.show_all () Gtk.main () if __name__ == '__main__': gui = gui ()

virun

def on_open_clicked (selwer, Knäppchen): dréckt "\" Open \ "Knäppchen gouf geklickt"

Et ass eng Funktioun déi am Terminal aktivéiert gëtt wa mir op den Open Button klickt. D'Signal fir et z'aktivéieren ass:

self.button.connect ("geklickt", self.on_open_clicked) def on_close_clicked (selwer, Knäppchen): dréckt "Ofschlossapplikatioun" Gtk.main_quit ()

Et ass eng Funktioun déi aktivéiert gëtt wa mir op de Knäppchen zoumaachen.

schloe mer de Programm zou.

d'Signal fir z'aktivéieren ass

self.button.connect ("geklickt", self.on_close_clicked) vum gi.repositiven Import Gtk ### mir ruffe PyGTK Bibliothéiken op ### Klass Gui (): ### Klass Definitioun genannt Gui ass d'Haaptklass # ##

Deklaratioun vu Widgets: eng Widgets ass e Programm, dat vun de GUI Bibliothéiken virausbestëmmt gëtt, déi mir benotzen. Zum Beispill, e Widgets ass e Knäppchen, eng Fënster, eng Këscht, asw. Dëst sinn d'Widgets déi mir an eisem Programm deklaréieren.

self.window = Gtk.Window () ### window ### self.box = Gtk.Box () ### box #### self.button = Gtk.Button (label = 'Open') ### # oppe Knäppchen #### self.button = Gtk.Button (label = 'Zoumaachen') #### Knäppchen zoumaachen #### self.window.add (self.box) #### d'Box ass enthale d'Fënster genannt Fënster #### self.box.pack_start (self.button, True, True, 0) ##### de Knäppchen ass an der Këscht genannt Box ### self.window.show_all () ## # mir weisen déi ganz Fënster ### gui = gui () ### erstellen e Gui Objet ####

Mir placéieren eise Programm an engem Dossier deen an eisem Fall einfach genannt gëtt um Desktop

fert

Mir öffnen den Ordner mam Terminal, a mengem Fall benotze ech Nemo vu Linux Mint 14.

zougemaach

Fir ze kompiléiere setzen mir an den Terminal Python gui.py

gesinn d'Bild.

Uschloss

Elo kënne mir eise klenge Programm gesinn oder e neie Widget erstallt mat de PyGTK 3 Bibliothéiken

Et ass eng einfach Fënster mat zwee Knäppercher.

 

Gëlle

 

Elo deele mir de Programm an dräi Deeler, da loossen ech de Code fir déi dräi Dateien.

Éischt gui.py Datei

vum gi.repositiven Import Gtk vum Zerstéieren Import zerstéiert vun io Import io Klass Gui (zerstéiert, io): def __init __ (selwer): self.window = Gtk.Window () self.window.connect ('läschen-Event', Gtk .main_quit) self.box = Gtk.Box () self.window.add (self.box) self.button = Gtk.Button (label = 'Open') self.button.connect ("geklickt", self.on_open_clicked) self.box.pack_start (self.button, True, True, 0) self.button = Gtk.Button (label = 'Close') self.button.connect ("geklickt", self.on_close_clicked) self.box.pack_start ( self.button, True, True, 0) self.window.show_all () Gtk.main () if __name__ == '__main__': gui = gui ()

Zweet io.py Datei

Klass io: Def on_open_clicked (selwer, Knäppchen): Dréckt "\" Open \ "Knäppchen gouf geklickt"

Drëtt Datei destroy.py

vum gi.repository Import Gtk Klass zerstéieren: def on_close_clicked (selwer, Knäppchen): dréckt "Closing application" Gtk.main_quit ()

Mir placéieren déi dräi Dateien an deemselwechten Dossier an eisem Fall, den Dossier heescht einfach gedeelt.

einfach

Fir déi dräi Dateien ze kompiléieren. Mir öffnen den Ordner mam Terminal an setzen et einfach erëm an den Terminal

python gui.py

Ännerunge vum Gui.py Code gemaach

vum zerstéieren Import zerstéieren ### Ausso fir eis Datei z'importéieren destroy.py ### aus io Import io ### Ausso fir eis Datei z'importéieren io.py ### Klass gui (zerstéieren, io): #### zu Klass main addéiere mer d'Ënnerklassen zerstéieren an io ####

Dir kënnt gesinn datt de Saz

def on_open_clicked (selwer, Knäppchen): dréckt "\" Open \ "Knäppchen gouf geklickt"

Et ass net an gui.py, et ass an der io.py Datei

Saz

def on_close_clicked (selwer, Knäppchen):

Drécken "Closing application"
Gtk.main_quit ()

et ass an der destroy.py Datei

Sou kënne mir e Programm a vill Dateie gläichzäiteg a verschiddene Verzeechnes deelen.

Op der anerer Säit, Python ass e Pfeiler vu gratis Software, an et ass ugepasst fir mat GTK 3.6 /3.8 ze schaffen, säin Numm ass PyGTK. D'Python Adaptatioun fir KDE heescht PyQT.

Python ass fir Mac OS a WINDOWS ugepasst.

Ech hoffen dëst PyGTK3 Mini Tutorial war hëllefräich fir Iech. Si kënnen all konstruktiv Kritike maachen, déi se wëllen.

Ech weess och e puer Gtk 3.4 /3.6 a Vala GTK 3.4 / 3.6.

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

Lescht entschëllegen KDE Benotzer sech net fir e Mini Tutorial fir KDE ze maachen.


Den Inhalt vum Artikel hält sech un eis Prinzipie vun redaktionnell Ethik. Fir e Feeler ze mellen klickt hei.

33 Kommentaren, loosst ären

Gitt Äre Kommentar

Är Email Adress gëtt net publizéiert ginn.

*

*

  1. Responsabel fir d'Daten: Miguel Ángel Gatón
  2. Zweck vun den Donnéeën: Kontroll SPAM, Kommentarmanagement.
  3. Legitimatioun: Är Zoustëmmung
  4. Kommunikatioun vun den Donnéeën: D'Donnéeë ginn net un Drëttubidder matgedeelt ausser duerch legal Verpflichtung.
  5. Datenspeicher: Datebank gehost vun Occentus Networks (EU)
  6. Rechter: Zu all Moment kënnt Dir Är Informatioun limitéieren, recuperéieren an läschen.

  1.   Rotsch 87 sot

    An kde benotze ech léiwer kdevelop (ech mengen dat ass wat et heescht) fir de Gui wuel ze kreéieren awer ech hunn et nach ëmmer schwéier d'Prozesser ze fannen fir datt et eppes geschitt: '(

  2.   St0rmt4il sot

    Super fir déi vun eis déi de Python benotzen: D!

    Merci!

  3.   Pablo sot

    Moien, ech hunn dës Gemeinschaft scho laang gefollegt an ech sinn net ganz sécher ob et déi éischte Kéier ass, datt ech kommentéiert hunn oder ech et scho gemaach hunn 😀 (ech sinn net wierklech gegeben Kommentarer um Internet wierklech ze schreiwen). D'Saach ass datt ech et maachen fir dem Elav a KZKG ^ Gaara e Virschlag ze hannerloossen als Administrateuren, an ech mengen et wier eng gutt Iddi fir e Plugin fir Syntaxefaarf bäizefügen elo datt ech a leschter Zäit méi Posts mat Code a verschiddene Programméierungssproochen gesinn. Ech weess datt et e puer Plugins sinn awer ech hunn näischt probéiert well ech kee Wordpress Benotzer sinn, also loossen ech Iech iwwer d'Liewensfäegkeet vun der Ufro nozedenken. Ech notzen dës Geleeënheet fir de Rescht vun de Lieser ze froen wat se vun der Iddi denken, well ech weess datt et Leit dobausse gëtt déi léiwer de Code ouni Dekoratioun liesen. Ech entschëllege mech wann dëst schonn hei kommentéiert gouf an et aus irgendege Grënn refuséiert gouf, well ech mech net drun erënneren datt ech eng Diskussioun iwwer dëst Thema gesinn hunn.

    1.    marianogaudix sot

      D'Wourecht ass datt ech d'Optioun hätt fir d'Syntax ze faarwen fir de Code vun de Programmiersprachen ze markéieren.
      Dat géif Benotzer hëllefen, déi Programméierungssprooche léiere wëllen.

      Awer hey, ech sinn och bequem mam Forum an datt mir zesumme kënnen diskutéieren a léieren.

      1.    eliotime3000 sot

        GNU Emacs ass méi komfortabel, well op d'mannst musst Dir wielen a wéi engem Programmiersprache Checker Dir wëllt schaffen (wann Dir net méi Gewiicht fir Äre Prozessor wëllt, benotzt GNU Nano a genéisst Minimalismus am Beschten).

        1.    marianogaudix sot

          Elio mir schwätzen iwwer Worpress. Implementéiert am Blog From Linux. Et huet net d'Funktiounen fir d'Bréiwer vun de Posts ze faarwen.

          1.    eliotime3000 sot

            Oh sorry.

        2.    pandev92 sot

          Naaa emacs ass bequem fir déi, déi 84 Fanger hunn XD .., normal Leit, Textmate, Sublimetext oder Notizblock ++ xd

          1.    eliotime3000 sot

            Déi implausibel Saach ass net geléiert ze schreiwen, wat erfuerderlech ass fir GNU Emacs a seng Tastatur Ofkierzungen gutt ze handhaben. Zousätzlech mécht seng GUI et einfach fir Iech seng Menüen ze benotzen (et kann a Windows benotzt ginn, awer et ass net recommandéiert et mam normale Modus ze maachen awer mat Kommandopromptmodus sou datt win32 Äre Skript net boykottéiert).

  4.   Carper sot

    Ganz cool Tutorial. Awer iwwregens ass de Python Quellcode net kompiléiert, et ass eng interpretéiert Sprooch.

    1.    Giskard sot

      Et kann op Pseudo Code kompiléiert ginn. Et ass net Maschinnssprooch awer Bytes déi dem Dolmetscher eppes duerstellen, awer de Prozess gëtt och kompiléiert genannt. An dësem Sënn ass et méiglech ze soen datt eppes kompiléiert ass.

  5.   hty sot

    Vläicht ass et besser Pytgk2 ze léieren, well déi lescht Versioun verfügbar fir Windows ass 2.24. D'Serie 3 ass opfälleg duerch säi Fehlen. An déi schlecht Zongen soen datt de Gnome all Apis an all nei Versioun brécht.

    1.    marianogaudix sot

      Ech programméiere e Mockup mat GTK 3.4 / 3.6 an d'Wourecht ass se briechen Är Gedold an Äre Kapp, Dir musst de Code iwwerschreiwen, elo verstinn ech firwat d'Linux Mint Leit iwwer GTK an dem GNOME Projet beschwéieren.
      Zu deene vu MINT sinn ech mam GTK 2.4 averstanen dat ass net geschitt.

  6.   Carlos sot

    Gutt Tutorial a Referenzen.
    Just en Detail, well de Code agefouert gouf, a Python Indentatiounen sinn obligatoresch a sollten am Beispillcode respektéiert ginn.

    Merci!

    1.    marianogaudix sot

      Kënnt Dir erklären aus wat déi obligatoresch Identifikatiounen am Python besteet? Ech soen Iech d'Wourecht, ech hunn dat nach ni héieren. Ech si schlecht gewinnt mat de PyGTK 2/3 Foren op Englesch a vläicht iwwersinn ech et.

      1.    Giskard sot

        Am Python benotzt Dir keng Schlësselen wéi an C oder Ufanks / Ennblocken wéi am Pascal, awer alles gëtt verstanen duerch d'Indentioun datt Dir de Code gitt. Dat ass, d'Blocker ginn als indentéiert unerkannt. Et ass eng Feature déi ech besonnesch gär hunn. Dir vermeit Schlësselen ze schreiwen a sou Saachen.

        1.    pandev92 sot

          Ech hunn dat einfach net gär, et schéngt méi einfach zwee kleng Schlësselen oder e std :: endl; ze setzen, wéi ze gesinn wann d'xd Linn gutt tabuléiert ass

          1.    Felipe sot

            : p Äre Programméierungsproff setzt en 0 fir Iech. Oder méi schlëmm, si entloossen Iech vun Ärem Job. Wat am meeschte wichteg ass, ass datt de Code liesbar ass mat allem wat dat implizéiert

          2.    pandev92 sot

            Schluss mat Klameren, mécht mech vill méi liesbar XD ..

          3.    Giskard sot

            Eeschtlech ???


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

            Dir gesitt? Ouni Indentatiounen ass et net ganz gutt verstanen. An dat ass einfach. Mat enger méi komplexer, just de Compiler versteet et. D'Saach ass, well Dir musst souwisou indentéieren (fir de Mënsch de Code ze verstoen) firwat wier et iwwerflësseg a benotzt Separatoren? Genuch mat Indentatioun an dat ass et.

          4.    pandev92 sot

            Natierlech gëtt näischt verstanen, well Dir respektéiert d'Regele vum gudde Schreiwe fir e c / c ++ Programm. Wat Dir gemaach hutt ass valabel fir alles, wéi zum Beispill eng Funktioun ze nestelen, an enger Funktioun an enger anerer Funktioun déi an enger anerer ass, da wëll ech dech xd gesinn wann Dir et fäeg ass ze verstoen.

          5.    pandev92 sot

            iwwregens, mat zwee Looken, ass dee Code einfach verständlech xD

          6.    Giskard sot

            Wat ech gemaach hunn, hunn ech mat Zweck gemaach fir Iech ze weisen datt ouni Indentatioun, och wann et kompiléiert, et extrem schwéier ass e Code ze verstoen. Also hutt Dir 2 Regelen: Indent an ëmfaassen mat Ofgrenzeren. Awer dat ass iwwerflësseg. Am Python gëtt dëse Code einfach net vum Dolmetscher akzeptéiert. An Dir hutt nëmmen eng Regel: Indent. Einfach.
            Awer hey, jiddereen mat sengem Goût.

          7.    Atheyus sot

            Béid sinn gutt, déi indentéiert an déi net indentéiert, a menger Meenung no léiwer ech de Semikolon Stil oder Rubin, ähnlech wéi Python awer d'Indentioun ass net néideg.

            Dëst ass besser verstanen: P:

            Echo 'int main (int argc, char * argv []) {program_name = argv [0]; while ((argc> 1) && (argv [1] [0] ==' - ')) {switch (argv [ 1] [1]) {Fall 'v': verbose = 1; Break; Fall 'o': out_file = & argv [1] [2]; break; case 'l': line_max = atoi (& argv [1] [2]); break; default: fprintf (stderr, »Schlecht Optioun % s \ n », argv [1]); Benotzung ();} ++ argv; –argc;} wann (argc == 1) {do_file (" print.in ");} anescht {while (argc> 1 ) {do_file (argv [1]); ++ argv; –argc;}} zréck (0);} '| perl -p -e 's / \ {/ \ {\ n \ t / g; s / \; / \; \ n \ t / g; s / \ t \} / \} / g;'

            Gréiss 😀

      2.    Giskard sot

        Ech mengen Carlos heescht datt wou de Code erauskënnt keng Indents sinn. Dat mat Copy & Paste funktionnéiert einfach net. Ech weess net ob den Tag existéiert wann Dir e Post erstellt Sproochcode anzeginn. Et wier gutt wa se et géife setzen wann et net existéiert.

        1.    Giskard sot

          Ech hu scho gesinn wat de Problem ass: de CODE Tag läscht all Plazen a Tabs (et sollt dat net maachen !!!) Awer wann Dir en nbsp drop setzt da gesäit de Code gutt aus. A0 an Hex (160 am Dezember) och wann ech mengen datt et vun der Schrëft ofhänkt (ech weess et net). Wann et benotzt gëtt da kënnt et esou aus:

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

          Dat a mengen Tester gesäit et gutt aus, awer ech hu kee Virschau wann ech Äntwerten posten (an et soll et sinn !!!) Wann et net erauskënnt, ass et net meng Schold

          1.    marianogaudix sot

            Kuckt d'Beispiller déi de Sebastian Pölsterl a sengem PyGTK 3 Tutorial gëtt, de Sebastian placéiert keng Etiketten.

            Beispill:

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

            Dir kënnt de ganzen Tutorial vum Sebastian gesinn.

          2.    Giskard sot

            Ech weess net wat Dir mengt. Wat ech soen ass datt et hei, an de Posts, net méiglech ass den "CODE" HTML Tag ze benotzen sou datt dat wat Dir als Code setzt an et kënnt gutt verréckelt. Op der Säit déi Dir referéiert, wann Dir d'Säitquelle kuckt, da gesitt Dir datt et kee CODE benotzt mee aner HTML Ofgrenzung benotzt.
            Et ass net géint de Code deen Dir agefouert hutt, awer éischter e Feeler am Postingsystem vun dëser Säit ze weisen. Wat, vläicht, Admins kënne flécken.
            Wann ech iwwer Tags schwätzen, da schwätzen ech natierlech iwwer HTML, net iwwer Python. Op jiddfer Fall, wann Dir Code ouni Indentéierung an Python setzt, funktionnéiert et just net. Wann e Newbie kënnt a kopéiert de Code wéi en an dësem Post erschéngt a probéiert en auszeféieren, wäert hien net falen. Dir kënnt frustréiert sinn wéi Dir en Newbie sidd. Elo ass d'Schold net Äert; an a menger direkter fréierer Äntwert wat ech gemaach hunn, war e Wee fir de Problem vum User-who-posts Niveau ze léisen.

          3.    marianogaudix sot

            Dir hutt absolut Recht, ech hätt sollten Fotoen eropgelueden hunn amplaz de Code ze kopéieren.
            fir ze weisen wéi Aussoen an der PyGTK 3 richteg bestallt sinn.

  7.   Felipe sot

    Fir mam Python ze programméieren empfeelen ech Eclipse mam PyDev Plugin oder Pychar m ze benotzen

  8.   louis sot

    Wéi uewendriwwer kommentéiert, ass dat genau firwat ech de Python net gär hunn, wéinst der Indentatiounsproblematik. Wéi mir gesi hunn, kopéiert & paste mécht net, wat net mat anere Sprooche wéi C, Java, PHP, asw.

    D'Liesbarkeet Saach, mir benotze e Code Beautifier (wéi http://indentcode.net/ ) a fäerdeg,

    Dat ellen ass fixéiert, awer wann et keng Incentment gëtt an d'Logik geännert gëtt, klénge mir ..

  9.   Carlos sot

    Ech sinn nei bei PyGTK, ass et méiglech mat Shell Scripten an dëser Sprooch ze interagéieren?

    1.    Hallo sot

      Merci fir den Tutorial.

      Merci.

bool (richteg)