PyGTK 3: mini GUI tutorial na may Python + GTK + 3

Gagawa kami ng isang maliit na programa sa PyGTK 3.0 na gumagana din para sa PyGTK 3.4. Ituturo sa iyo ng maliit na GUI na ito kung paano hatiin ang isang programa sa dalawa o higit pang mga file.

Maaari mong bisitahin ang tutorial ni Sebastian Pölsterl sa bagong PyGTK 3, narito ang bagong tutorial, iniiwan ko ang link:

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

Ito ang blog ni Sebastian.

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

Ang isang pagpuna sa tutorial na ito ni Sebastian ay hindi ito nagtuturo kung paano paghatiin ang isang programa sa mga bahagi o sa maraming mga file, mabuti kung magpapakita siya ng isang halimbawa kung paano ito gawin sa PyGTK 3.

Ang lahat ng malaki at kumplikadong mga programa ay nahahati sa maraming mga file at ang mga file ay inilalagay kahit sa iba pang mga direktoryo, iyon ay, matatagpuan ang mga ito sa iba't ibang mga folder.

Magsimula tayo sa maliit na halimbawa:

Narito ang code ng pagsulat sa isang solong file na tinatawag na gui.py. Binubuksan namin ang editor ng teksto ng Gedit o ang editor na pinaka ginagamit namin, kinokopya namin ang code sa ibaba at ini-save ito bilang gui.py

mula sa gi.repository import Gtk class gui (): def on_open_clicked (self, button): print "\" Open \ "button ay na-click na" def on_close_clicked (self, button): print "Closing application" 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. button = Gtk Button (label = 'Open') self.button.connect ("na-click", self.on_open_clicked) self.box.pack_start (self.button, True, True, 0) self.button = Gtk Button ( label = 'Close') self.button.connect ("na-click", self.on_close_clicked) self.box.pack_start (self.button, True, True, 0) self.window.show_all () Gtk.main () kung __name__ == '__main__': gui = gui ()

pedimento

def on_open_clicked (sarili, pindutan): i-print ang "\" Buksan \ "na pindutan ay na-click"

Ito ay isang pagpapaandar na naaktibo sa terminal kapag na-click namin ang bukas na pindutan. Ang senyas upang buhayin ito ay:

self.button.connect ("na-click", self.on_open_clicked) def on_close_clicked (sarili, pindutan): i-print ang "Pagsasara ng application" Gtk.main_quit ()

Ito ay isang pagpapaandar na naaktibo kapag nag-click kami sa malapit na pindutan.

isara ang pinapatakbo naming programa.

ang signal upang buhayin ito ay

self.button.connect ("na-click", self.on_close_clicked) mula gi.repository import Gtk ### inanyayahan namin ang mga library ng PyGTK ### class gui (): ### ang kahulugan ng klase na tinatawag na gui ang pangunahing klase # ##

Pagdeklara ng Mga Widget: ang isang widget ay isang program na tinukoy ng mga GUI library na ginagamit namin. Halimbawa, ang isang widget ay isang pindutan, isang window, isang kahon, atbp. Ito ang mga widget na ipinapahayag namin sa aming programa.

self.window = Gtk.Window () ### window ### self.box = Gtk.Box () ### box #### self.button = Gtk Button (label = 'Open') ### # buksan ang pindutan #### self.button = Gtk. Button (label = 'Close') #### close button #### self.window.add (self.box) #### ang kahon ay nakapaloob sa ang window ay tinawag na window #### self.box.pack_start (self.button, True, True, 0) #### ang pindutan ay nakapaloob sa kahon na tinawag na box ### self.window.show_all () ## # ipinapakita namin ang buong window ### gui = gui () ### lumikha ng isang gui object ####

Inilalagay namin ang aming programa sa isang folder na tinatawag na simple sa aming kaso sa desktop

mataba

Binubuksan namin ang folder gamit ang terminal, sa aking kaso ginagamit ko ang Nemo mula sa Linux Mint 14.

sarado

Upang maipon ay inilalagay namin sa terminal python gui.py

tingnan ang larawan.

pandulo

Ngayon ay maaari na nating makita ang aming maliit na programa o bagong widget na nilikha gamit ang mga library ng PyGTK 3

Ito ay isang simpleng window na may dalawang mga pindutan.

Walang pamagat

Ngayon hinati namin ang programa sa tatlong bahagi, pagkatapos ay iniiwan ko ang code para sa tatlong mga file.

Una gui.py file

mula sa gi.repository import Gtk mula sa sirain ang import na sirain mula sa io import io class gui (sirain, io): def __init __ (sarili): 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 ("na-click", self.on_open_clicked ) self.box.pack_start (self.button, True, True, 0) self.button = Gtk Button (label = 'Close') self.button.connect ("na-click", self.on_close_clicked) self.box.pack_start (self.button, True, True, 0) self.window.show_all () Gtk.main () kung __name__ == '__main__': gui = gui ()

Pangalawa io.py file

class io: def on_open_clicked (sarili, pindutan): i-print ang "\" Buksan \ "na pindutan ay na-click"

Pangatlong file destr.py

mula sa gi.repository import Gtk class sirain: def on_close_clicked (sarili, pindutan): i-print ang "Closing application" Gtk.main_quit ()

Inilalagay namin ang tatlong mga file sa parehong folder sa aming kaso, ang folder ay tinatawag na simpleng hinati.

simple

Upang maipon ang tatlong mga file. Buksan namin ang folder gamit ang terminal at ibalik lamang ito sa terminal

python gui.py

Mga pagbabago na ginawa sa gui.py code

mula sa sirain ang import sirain ### pahayag upang i-import ang aming file na destr.py ### mula sa io import io ### pahayag upang i-import ang aming file io.py ### class gui (sirain, io): #### sa pangunahing klase idaragdag namin ang mga subclass na sirain at io ####

Maaari mong makita na ang pangungusap

def on_open_clicked (sarili, pindutan): i-print ang "\" Buksan \ "na pindutan ay na-click"

Wala ito sa gui.py, nasa io.py file ito

Pangungusap

def on_close_clicked (sarili, pindutan):

i-print ang "Application ng pagsara"
Gtk.main_quit ()

ito ay matatagpuan sa file ng destroy.py

Sa gayon maaari nating hatiin ang isang programa sa maraming mga file na matatagpuan sa iba't ibang mga direktoryo nang sabay.

Sa kabilang banda, ang Python ay isang haligi ng libreng software, at ito ay inangkop upang gumana sa GTK 3.6 /3.8, ang pangalan nito ay PyGTK. Ang pagbagay ni Python para sa KDE ay tinatawag na PyQT.

Ang Python ay inangkop para sa Mac OS at WINDOWS.

Umaasa ako na ang PyGTK3 mini tutorial na ito ay naging kapaki-pakinabang sa iyo. Maaari nilang gawin ang lahat ng nakabubuo na mga pintas na nais nila.

May alam din akong ilang Gtk 3.4 /3.6 at Vala GTK 3.4 / 3.6.

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

Panghuli, humihingi ng paumanhin ang mga gumagamit ng KDE sa hindi paggawa ng mini tutorial para sa KDE.


Iwanan ang iyong puna

Ang iyong email address ay hindi nai-publish. Mga kinakailangang patlang ay minarkahan ng *

*

*

  1. Responsable para sa data: Miguel Ángel Gatón
  2. Layunin ng data: Kontrolin ang SPAM, pamamahala ng komento.
  3. Legitimation: Ang iyong pahintulot
  4. Komunikasyon ng data: Ang data ay hindi maiparating sa mga third party maliban sa ligal na obligasyon.
  5. Imbakan ng data: Ang database na naka-host ng Occentus Networks (EU)
  6. Mga Karapatan: Sa anumang oras maaari mong limitahan, mabawi at tanggalin ang iyong impormasyon.

  1.   Nabulok87 dijo

    Sa kde mas gusto kong gumamit ng kdevelop (sa palagay ko iyon ang tawag sa ito) upang makagawa ng gui nang madali ngunit nahihirapan pa rin akong hanapin ang mga proseso upang mangyari ito x bagay: '(

  2.   st0rmt4il dijo

    Mahusay para sa atin na gumagamit ng Python: D!

    Pagbati!

  3.   Pablo dijo

    Kumusta, matagal ko nang sinusundan ang pamayanan na ito at hindi ako sigurado kung ito ang unang pagkakataon na nagkomento ako o nagawa ko na ito dati 😀 (Hindi talaga ako nabigyan ng pagsusulat ng mga komento sa web talaga). Ang bagay ay ginagawa ko ito upang mag-iwan ng mungkahi kina Elav at KZKG ^ Gaara bilang mga tagapangasiwa, at sa palagay ko magandang ideya na magdagdag ng isang plugin para sa pangkulay ng syntax ngayon na nitong mga nagdaang araw na nakakakita ako ng mas maraming mga post na may code sa iba't ibang mga wika ng programa. Alam kong mayroong ilang mga plugin ngunit hindi ko nasubukan ang alinman dahil hindi ako isang gumagamit ng wordpress, kaya't iniiwan kita na isipin ang tungkol sa posibilidad ng kahilingan. Ginagamit ko ang pagkakataong ito upang tanungin ang natitirang mga mambabasa kung ano ang iniisip nila tungkol sa ideya, sapagkat alam ko na may mga tao roon na mas gusto basahin ang code nang walang anumang adorno. Humihingi ako ng paumanhin kung ito ay nai-puna na dito at ito ay tinanggihan para sa ilang kadahilanan, dahil hindi ko natatandaan na nakikita ang anumang talakayan sa paksa.

    1.    marianogaudix dijo

      Ang totoo ay nais kong magkaroon ng pagpipilian upang kulayan ang syntax upang mai-highlight ang code ng mga wika ng programa.
      Makatutulong iyon sa mga gumagamit na nais matuto ng mga wika ng programa.

      Ngunit hey, komportable din ako sa forum at maaari nating pag-usapan at matutuhan nang magkasama.

      1.    eliotime3000 dijo

        Ang GNU Emacs ay mas komportable, dahil hindi bababa sa kailangan mong pumili kung aling programa ang checker ng wika na nais mong gumana (kung hindi mo nais ang higit na timbang para sa iyong processor, gamitin ang GNU Nano at tangkilikin ang pinakamababa sa pinakamabuti).

        1.    marianogaudix dijo

          Elio estamos hablando de Worpress . Implementado en el blog Desde Linux. No tiene las funciones para dar color a las letras de los posteos .

          1.    eliotime3000 dijo

            Ay sorry po.

        2.    pandev92 dijo

          Ang naaa emacs ay komportable para sa mga may 84 daliri XD .., normal na tao, textmate, sublimetext o notepad ++ xd

          1.    eliotime3000 dijo

            Ang hindi maipahiwatig na bagay ay hindi natutunan ang pag-type, na kinakailangan upang mahawakan nang maayos ang GNU Emacs at ang mga keyboard shortcut. Bilang karagdagan, ginagawang madali ng GUI nito para sa iyo na gamitin ang mga menu nito (maaari itong magamit sa Windows, ngunit hindi ito inirerekumenda na gawin ito sa normal na mode ngunit may command prompt mode upang hindi ma-boycott ng win32 ang iyong script).

  4.   Carper dijo

    Napakagandang tutorial. Ngunit sa pamamagitan ng ang paraan, ang python source code ay hindi naipon, ito ay isang interpreted na wika.

    1.    giskard dijo

      Maaari itong maiipon sa pseudo code. Hindi ito wika ng makina ngunit mga byte na kumakatawan sa isang bagay sa interpreter, ngunit ang proseso ay tinatawag ding naipon. Sa puntong ito, posible na sabihin na may isang bagay na naipon.

  5.   hty dijo

    Marahil mas mahusay na malaman ang pytgk2 dahil ang pinakabagong bersyon na magagamit para sa Windows ay 2.24. Kitang-kita ang serye 3 sa kawalan nito. At sinasabi ng mga hindi magandang dila na sinisira ng gnome ang lahat ng mga apis sa bawat bagong bersyon.

    1.    marianogaudix dijo

      Nagprogram ako ng isang mockup sa GTK 3.4 / 3.6 at ang totoo ay sinisira nila ang iyong pasensya at ang iyong ulo, kailangan mong isulat muli ang code, ngayon naiintindihan ko kung bakit nagreklamo ang mga taong Linux Mint tungkol sa GTK at sa proyekto ng GNOME.
      Sa mga MINT sumasang-ayon ako sa GTK 2.4 hindi ito nangyari.

  6.   Carlos dijo

    Magandang tutorial at sanggunian.
    Isang detalye lamang, dahil inilagay ang code, sa Python indentations ay sapilitan at dapat igalang sa halimbawa ng code.

    Pagbati!

    1.    marianogaudix dijo

      Maaari mo bang ipaliwanag kung ano ang binubuo ng mga ipinag-uutos na pagkakakilanlan sa Python? Upang sabihin sa iyo ang totoo, hindi ko pa naririnig iyon. Masama ako sa mga forum ng PyGTK 2/3 sa Ingles at baka hindi ko ito pansinin.

      1.    giskard dijo

        Sa Python hindi ka gumagamit ng mga key tulad ng sa C o start / end blocks tulad ng sa Pascal, ngunit ang lahat ay nauunawaan sa pamamagitan ng indentation na ibibigay mo ang code. Iyon ay, ang mga bloke ay kinikilala ng pag-indent. Ito ay isang tampok na partikular kong mahal. Iniiwasan mo ang pagsusulat ng mga susi at bagay na tulad nito.

        1.    pandev92 dijo

          Hindi ko lang gusto iyon, parang mas simple na maglagay ng dalawang maliit na mga susi o isang std :: endl;, kaysa nakikita kung ang linya ng xd ay maayos na naka-tabulate

          1.    felipe dijo

            : p Ang iyong guro sa programa ay maglalagay ng 0 para sa iyo. O mas masahol na paalisin ka nila mula sa iyong trabaho. Ang pinakamahalaga ay ang code na nababasa sa lahat ng ipinahihiwatig

          2.    pandev92 dijo

            nagtatapos sa pagsasara ng mga brace, ginagawa akong mas madaling mabasa XD ..

          3.    giskard dijo

            Seryoso ???


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

            Kita mo? Nang walang mga indentasyon hindi ito masyadong nauunawaan. At madali iyon. Sa isang mas kumplikado, ang tagatala lamang ang nakakaintindi nito. Ang bagay ay, dahil DAPAT kang mag-indent pa rin (upang maunawaan ng mga tao ang code) bakit magiging kalabisan ito at gagamit ng mga separator? Sapat na sa indentation at iyon na.

          4.    pandev92 dijo

            Siyempre, walang naiintindihan, dahil hindi mo iginagalang ang mga patakaran ng mahusay na pagsulat ng isang programa sa c / c ++. Ang ginawa mo ay wasto para sa anumang bagay, tulad ng pagpugad ng isang pag-andar, sa loob ng isang pagpapaandar sa loob ng isa pang pagpapaandar na nasa loob ng isa pa, kung gayon nais kong makita ka xd kung maunawaan mo ito.

          5.    pandev92 dijo

            sa pamamagitan ng paraan, na may dalawang hitsura, ang code na iyon ay madaling maunawaan xD

          6.    giskard dijo

            Ang ginawa ko ay ginawa kong sadya upang ipakita sa iyo na walang pagkakatiwala, kahit na nagsasama ito, napakahirap maunawaan ang anumang code. Kaya mayroon kang 2 mga panuntunan: Indent at encompass sa mga delimiters. Ngunit kalabisan iyon. Sa Python ang naturang code ay simpleng hindi tinanggap ng interpreter. At mayroon ka lamang isang panuntunan: Indent. Madali.
            Ngunit hey, lahat ng tao ay may kanilang kagustuhan.

          7.    Atheyus dijo

            Pareho ang mabuti, ang naka-indent at ang hindi naka-indent, sa palagay ko ginugusto ko ang istilo ng semicolon o ruby, katulad ng sawa ngunit hindi kinakailangan ang pagkakulong.

            Ito ay kung paano ito mas nauunawaan: P:

            echo 'int main (int argc, char * argv []) {program_name = argv [0]; habang ((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, »Hindi magandang pagpipilian % s \ n », argv [1]); paggamit ();} ++ argv; –argc;} kung (argc == 1) {do_file (" print.in ");} iba pa {habang (argc> 1 ) {do_file (argv [1]); ++ argv; –argc;}} return (0);} '| perl -p -e 's / \ {/ \ {\ n \ t / g; s / \; / \; \ n \ t / g; s / \ t \} / \} / g;'

            Pagbati

      2.    giskard dijo

        Sa palagay ko nangangahulugan si Carlos na kung saan lalabas ang code ay walang mga pambahay. Na sa kopya at i-paste ay hindi gagana. Hindi ko alam kung mayroon ang tag kapag lumilikha ng isang post upang ipasok ang code ng wika. Mabuti kung ilalagay nila ito kung wala ito.

        1.    giskard dijo

          Nakita ko na kung ano ang problema: tinatanggal ng CODE Tag ang lahat ng mga puwang at tab (hindi ito dapat gawin !!!) Ngunit kung maglagay ka ng isang nbsp dito pagkatapos ay mukhang maayos ang code. A0 sa hex (160 sa dec) bagaman sa palagay ko maaaring depende ito sa font (hindi ko alam). Kung ginamit ito pagkatapos ay lumabas ito tulad nito:

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

          Alin sa aking mga pagsubok ang mukhang maganda, ngunit wala akong preview kapag nag-post ako ng mga sagot (at dapat na may !!!) Kung hindi ito lumabas, hindi ko ito kasalanan 😉

          1.    marianogaudix dijo

            Tingnan ang mga halimbawang ibinigay ni Sebastian Pölsterl sa kanyang tutorial na PyGTK 3, hindi naglalagay si Sebastian ng mga label.

            Halimbawa:

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

            maaari mong makita ang lahat ng tutorial ni Sebastian.

          2.    giskard dijo

            Hindi ko alam kung ano ang ibig mong sabihin. Ang sinasabi ko ay dito, sa mga post, hindi posible na gamitin ang HTML Tag na "CODE" upang kung ano ang inilagay mo bilang code at lalabas itong mahusay na naka-indent. Sa pahina na iyong tinukoy, kung nakikita mo ang mga mapagkukunan ng pahina, makikita mo na hindi ito gumagamit ng CODE ngunit gumagamit ng iba pang mga HTML delimiter.
            Hindi ito labag sa code na inilagay mo sa halip ay itinuturo ang isang kamalian sa sistema ng pag-post ng site na ito. Alin, marahil, maaaring ayusin ng mga admin.
            Kapag pinag-uusapan ko ang tungkol sa mga tag malinaw na sinasabi ko ang tungkol sa HTML, hindi sa Python. Sa anumang kaso, kung inilagay mo ang code nang walang pagkakabit sa Python hindi lamang ito gagana. Kung ang isang newbie ay dumating at kopyahin ang code tulad ng paglitaw nito sa post na ito at subukang patakbuhin ito, mabibigo siya. Maaari kang mabigo dahil ikaw ay isang newbie. Muli, ang kasalanan ay hindi iyo; at sa aking kaagad na dating sagot kung ano ang ginawa ko ay magbigay ng isang paraan upang malutas ang problema mula sa antas ng user-who-post.

          3.    marianogaudix dijo

            Talagang tama ka, dapat ay nag-upload ako ng mga larawan sa halip na kopyahin ang code.
            upang ipakita kung paano maayos na naayos ang mga pahayag sa PyGTK 3.

  7.   felipe dijo

    Upang programa sa python inirerekumenda ko ang paggamit ng Eclipse gamit ang PyDev plugin, o Pychar m

  8.   Mahinahon dijo

    Tulad ng nabanggit sa itaas, iyon ang dahilan kung bakit hindi ko gusto ang sawa, dahil sa mga indentation. Tulad ng nakita natin, ang paggana ng kopya at i-paste ay hindi gagana, na hindi mangyayari sa ibang mga wika tulad ng C, Java, PHP, atbp.

    Ang bagay na madaling mabasa, inilalapat namin ang isang pampaganda ng code (tulad ng http://indentcode.net/ ) at handa na,

    Ang pangit ay naayos, ngunit kung walang indentation at nabago ang lohika, tunog namin ..

  9.   Carlos dijo

    Bago ako sa PyGTK, posible bang makipag-ugnay sa mga shell script sa wikang ito?

    1.    Hello dijo

      Salamat sa tutorial.

      Pagbati.