PyGTK 3: Python + GTK + 3 ile mini GUI eğitimi

PyGTK 3.0 ile PyGTK 3.4 için de çalışan küçük bir program yapacağız. Bu küçük GUI size bir programı iki veya daha fazla dosyaya nasıl böleceğinizi öğretecektir.

Sebastian Pölsterl'in yeni PyGTK 3 hakkındaki öğreticisini ziyaret edebilirsiniz, işte yeni öğretici, bağlantıyı bırakıyorum:

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

Bu Sebastian'ın blogu.

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

Sebastian tarafından bu eğiticinin eleştirisi, bir programı parçalara veya birkaç dosyaya nasıl böleceğini öğretmemesi, PyGTK 3 ile nasıl yapılacağına dair bir örnek göstermesi iyi olurdu.

Tüm büyük ve karmaşık programlar birçok dosyaya bölünür ve dosyalar başka dizinlere bile yerleştirilir, yani farklı klasörlerde bulunurlar.

Küçük bir örnekle başlayalım:

İşte gui.py adlı tek bir dosyadaki yazma kodu. Gedit metin düzenleyicisini veya en çok kullandığımız editörü açıyoruz, aşağıdaki kodu kopyalayıp gui.py olarak kaydediyoruz

gi.repository import Gtk sınıfından gui (): def on_open_clicked (self, button): print "\" Open \ "butonu tıklandı" def on_close_clicked (self, button): print "Kapanma uygulaması" 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 = 'Aç') self.button.connect ("tıklandı", self.on_open_clicked) self.box.pack_start (self.button, True, True, 0) self.button = Gtk.Button ( label = 'Kapat') self.button.connect ("tıklandı", 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ınlık

def on_open_clicked (self, button): print "\" Open \ "düğmesi tıklandı"

Aç düğmesine tıkladığımızda terminalde aktif hale gelen bir fonksiyondur. Etkinleştirmek için sinyal:

self.button.connect ("tıklandı", self.on_open_clicked) def on_close_clicked (self, düğme): "Uygulama kapatılıyor" yazdır Gtk.main_quit ()

Kapat butonuna tıkladığımızda devreye giren bir fonksiyondur.

çalıştırdığımız programı kapatın.

onu etkinleştirmek için sinyal

gi.repository'den self.button.connect ("clicked", self.on_close_clicked) import Gtk ### PyGTK kitaplıklarını çağırıyoruz ### class gui (): ### gui adı verilen sınıf tanımı ana sınıftır # ##

Pencere Öğelerinin Bildirimi: Pencere öğeleri, kullandığımız GUI kitaplıkları tarafından önceden belirlenmiş bir programdır. Örneğin, bir widget bir düğme, bir pencere, bir kutu vb. Bunlar programımızda beyan ettiğimiz widget'lardır.

self.window = Gtk.Window () ### window ### self.box = Gtk.Box () ### box #### self.button = Gtk.Button (label = 'Open') ### # aç düğmesi #### self.button = Gtk.Button (label = 'Kapat') #### kapat düğmesi #### self.window.add (self.box) #### kutu pencere adındaki pencere #### self.box.pack_start (self.button, True, True, 0) ##### buton kutu adı verilen kutuda bulunur ### self.window.show_all () ## # tüm pencereyi gösteriyoruz ### gui = gui () ### bir gui nesnesi oluştur ####

Programımızı bizim durumumuzda masaüstündeki basit adlı bir klasöre yerleştiriyoruz

Fert

Klasörü terminal ile açıyoruz, benim durumumda Linux Mint 14'ten Nemo kullanıyorum.

kapalı

Derlemek için python gui.py terminale koyarız

resme bakın.

terminal

Artık küçük programımızı veya PyGTK 3 kitaplıklarıyla oluşturulan yeni widget'ımızı görebiliriz

İki düğmeli basit bir penceredir.

Başlıksız

Şimdi programı üç bölüme ayırıyoruz, ardından üç dosyanın kodunu bırakıyorum.

İlk gui.py dosyası

gi.repository ithal Gtk yok etmekten ithal yok etmek io sınıfından yok etmek io sınıf gui (yok, 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 = 'Aç') self.button.connect ("tıklandı", self.on_open_clicked ) self.box.pack_start (self.button, True, True, 0) self.button = Gtk.Button (label = 'Kapat') self.button.connect ("tıklandı", self.on_close_clicked) self.box.pack_start (self.button, True, True, 0) self.window.show_all () Gtk.main () if __name__ == '__main__': gui = gui ()

İkinci io.py dosyası

class io: def on_open_clicked (self, button): print "\" Open \ "düğmesi tıklandı"

Üçüncü dosya destroy.py

gi.repository import Gtk sınıfından destroy: def on_close_clicked (self, button): "Kapatma uygulaması" yazdır Gtk.main_quit ()

Bizim durumumuzda üç dosyayı aynı klasöre yerleştiririz, klasöre basit bölünmüş denir.

basit

Üç dosyayı derlemek için. Klasörü terminal ile açıyoruz ve sadece terminale geri koyuyoruz

python gui.py

Gui.py kodunda yapılan değişiklikler

destroy.py ### ifadesini imha etmek için destroy.py ### dosyamızı io import io ### deyiminden içe aktarmak için io.py ### class gui (destroy, io): #### main alt sınıfları, destroy ve io ekliyoruz ####

Cümlenin

def on_open_clicked (self, button): print "\" Open \ "düğmesi tıklandı"

Gui.py içinde değil, io.py dosyasında bulunuyor

Cümle

def on_close_clicked (self, düğme):

"Uygulama kapatılıyor" yazdır
Gtk.main_quit ()

destroy.py dosyasında bulunur

Böylece bir programı aynı anda farklı dizinlerde bulunan birçok dosyaya bölebiliriz.

Öte yandan, Python, özgür yazılımın bir direğidir ve GTK 3.6 /3.8 ile çalışmak üzere uyarlanmıştır, adı PyGTK'dır. Python'un KDE için uyarlamasına PyQT denir.

Python, Mac OS ve WINDOWS için uyarlanmıştır.

Umarım bu PyGTK3 mini öğreticisi size yardımcı olmuştur. İstedikleri tüm yapıcı eleştirileri yapabilirler.

Ayrıca biraz Gtk 3.4 /3.6 ve Vala GTK 3.4 / 3.6 biliyorum.

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

Son olarak, KDE kullanıcıları KDE için mini bir eğitim yapmadıkları için özür diler.


Yorumunuzu bırakın

E-posta hesabınız yayınlanmayacak. Gerekli alanlar ile işaretlenmiştir *

*

*

  1. Verilerden sorumlu: Miguel Ángel Gatón
  2. Verilerin amacı: Kontrol SPAM, yorum yönetimi.
  3. Meşruiyet: Onayınız
  4. Verilerin iletilmesi: Veriler, yasal zorunluluk dışında üçüncü kişilere iletilmeyecektir.
  5. Veri depolama: Occentus Networks (AB) tarafından barındırılan veritabanı
  6. Haklar: Bilgilerinizi istediğiniz zaman sınırlayabilir, kurtarabilir ve silebilirsiniz.

  1.   çürük87 dijo

    Kde'de kolaylıkla gui oluşturmak için kdevelop'u (sanırım buna denir) kullanmayı tercih ediyorum ama yine de x şeyinin gerçekleşmesi için süreçleri bulmakta zorlanıyorum:

  2.   st0rmt4il dijo

    Python kullananlar için harika: D!

    Selamlar!

  3.   Paul dijo

    Merhaba, bu topluluğu uzun zamandır takip ediyorum ve ilk kez yorum yaptığımdan mı yoksa soyadan önce mi yaptığımdan pek emin değilim (gerçekten web'de yorum yazmaya pek vermedim). Mesele şu ki, bunu Elav ve KZKG ^ Gaara'ya yönetici olarak bir öneri bırakmak için yapıyorum ve son zamanlarda farklı programlama dillerinde kod içeren daha fazla gönderi gördüğüm için sözdizimi renklendirmesi için bir eklenti eklemenin iyi bir fikir olacağını düşünüyorum. Epeyce eklenti olduğunu biliyorum ama wordpress kullanıcısı olmadığım için hiç denemedim, bu yüzden sizi isteğin uygulanabilirliği hakkında düşünmeye bırakıyorum. Bu fırsatı, okuyucuların geri kalanına fikir hakkında ne düşündüklerini sormak için kullanıyorum, çünkü dışarıda kodu süslemeden okumayı tercih eden insanlar olduğunu biliyorum. Konuyla ilgili bir tartışma gördüğümü hatırlamadığım için bu konu burada daha önce yorumlanmışsa ve herhangi bir nedenle reddedilmişse özür dilerim.

    1.    Marianogaudix dijo

      Gerçek şu ki, programlama dillerinin kodunu vurgulamak için sözdizimini renklendirme seçeneğine sahip olmak istiyorum.
      Bu, programlama dillerini öğrenmek isteyen kullanıcılara yardımcı olur.

      Ama hey, ben de forumdan memnunum ve birlikte tartışabilir ve öğrenebiliriz.

      1.    eliotime3000 dijo

        GNU Emacs daha rahattır, çünkü en azından hangi programlama dili denetleyicisinde çalışmak istediğinizi seçmeniz gerekir (işlemciniz için daha fazla ağırlık istemiyorsanız, GNU Nano kullanın ve en iyi haliyle minimalizmin tadını çıkarın).

        1.    Marianogaudix dijo

          Elio, WordPress'ten bahsediyoruz. Blogda uygulandı Desde Linux. Yazıların harflerini renklendirme fonksiyonları yoktur.

          1.    eliotime3000 dijo

            Üzgünüm.

        2.    pandev92 dijo

          Naaa emacs, 84 parmaklı XD .., normal insanlar, metin arkadaşı, sublimetext veya notepad ++ xd olanlar için rahattır

          1.    eliotime3000 dijo

            Olası olmayan şey, GNU Emacs'ı ve klavye kısayollarını iyi idare edebilmek için gerekli olan yazmayı öğrenmemiş olmanızdır. Ek olarak, GUI'si menülerini kullanmanızı kolaylaştırır (Windows'ta kullanılabilir, ancak bunu normal modda değil, komut istemi modunda yapmanız önerilir, böylece win32 betiğinizi boykot etmez).

  4.   Bakıcı dijo

    Çok güzel öğretici. Ancak bu arada, python kaynak kodu derlenmemiş, yorumlanmış bir dildir.

    1.    Giskard dijo

      Sözde koda derlenebilir. Yorumlayıcı için bir şeyi temsil eden makine dili değil, baytlardır, ancak işlem de derlenmiş olarak adlandırılır. Bu anlamda bir şeyin derlendiğini söylemek mümkündür.

  5.   hty dijo

    Belki de pytgk2'yi öğrenmek daha iyidir çünkü Windows için mevcut olan en son sürüm 2.24'tür. Seri 3, yokluğuyla dikkat çekiyor. Ve kötü diller, gnome'un her yeni sürümde tüm apileri kırdığını söylüyor.

    1.    Marianogaudix dijo

      GTK 3.4 / 3.6 ile bir mockup programlıyorum ve gerçek şu ki onlar sabrınızı ve kafanızı kırıyor, kodu yeniden yazmanız gerekiyor, şimdi Linux Mint halkının neden GTK ve GNOME projesinden şikayet ettiğini anlıyorum.
      MINT'dekilere GTK 2.4'e katılıyorum, bu olmadı.

  6.   Carlos dijo

    İyi eğitim ve referanslar.
    Kod girildiği için Python'da girintiler zorunludur ve örnek kodda dikkate alınmalıdır.

    Selamlar!

    1.    Marianogaudix dijo

      Python'daki zorunlu tanımlamaların nelerden oluştuğunu açıklayabilir misiniz? Doğruyu söylüyorum, bunu hiç duymadım.PyGTK 2/3 İngilizce forumlarına çok alıştım ve belki de görmezden geliyorum.

      1.    Giskard dijo

        Python'da C'deki gibi anahtarlar veya Pascal'daki gibi başlangıç ​​/ bitiş blokları kullanmazsınız, ancak her şey koda verdiğiniz girinti ile anlaşılır. Yani bloklar girintili olarak kabul edilir. Bu özellikle sevdiğim bir özellik. Anahtar ve bunun gibi şeyler yazmaktan kaçınırsınız.

        1.    pandev92 dijo

          Bundan hoşlanmıyorum, iki küçük anahtar veya bir std :: endl; koymak, xd satırı iyi bir şekilde çizelgelenmişse görülmekten daha kolay görünüyor

          1.    felipe dijo

            : p Programlama öğretmeniniz sizin için bir 0 koyacaktır. Daha da kötüsü, sizi işinizden kovarlar. En önemlisi, kodun tüm ima edenlerle okunabilir olmasıdır.

          2.    pandev92 dijo

            kapanış parantezleri ile bitmesi beni çok daha okunaklı hale getiriyor XD ..

          3.    Giskard dijo

            Ciddi anlamda???


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

            Anlıyorsun? Girintiler olmadan çok iyi anlaşılmaz. Ve bu çok kolay. Daha karmaşık olanıyla, yalnızca derleyici anlar. Mesele şu ki, yine de girintilemek ZORUNDA OLDUĞUNUZ için (insanların kodu anlaması için) neden gereksiz olsun ve ayırıcılar kullansın? Yeterince girinti ve hepsi bu.

          4.    pandev92 dijo

            Elbette hiçbir şey anlaşılmıyor, çünkü c / c ++ 'da bir programın iyi yazım kurallarına saygı duymuyorsunuz. Yaptığınız şey, bir işlevi başka bir işlevin içindeki bir işlevin içine yerleştirmek gibi herhangi bir şey için geçerlidir, o zaman anlayabiliyorsanız sizi xd görmek istiyorum.

          5.    pandev92 dijo

            bu arada, iki bakışla, bu kod kolayca anlaşılabilir xD

          6.    Giskard dijo

            Yaptığım şeyi, girinti olmadan derlemesine rağmen herhangi bir kodu anlamanın son derece zor olduğunu göstermek için kasten yaptım. Yani 2 kuralınız var: Girinti yapın ve sınırlayıcılarla çevreleyin. Ancak bu gereksizdir. Python'da bu tür bir kod yorumlayıcı tarafından kabul edilmez. Ve sadece bir kuralınız var: Girinti. Kolay.
            Ama hey, zevkleri olan herkes.

          7.    Atheyus dijo

            Her ikisi de iyi, girintili ve girintisiz, bence python'a benzer şekilde noktalı virgül stilini veya yakutu tercih ederim, ancak girinti gerekli değildir.

            Bu daha iyi anlaşılır: P:

            echo 'int main (int argc, char * argv []) {program_name = argv [0]; while ((argc> 1) && (argv [1] [0] ==' - ')) {anahtar (argv [ 1] [1]) {case 'v': ayrıntılı = 1; break; case 'o': out_file = & argv [1] [2]; break; case 'l': line_max = atoi (& argv [1] [2]); break; varsayılan: fprintf (stderr, »Kötü seçenek % s \ n », argv [1]); kullanım ();} ++ argv; –argc;} if (argc == 1) {do_file (" print.in ");} else {while (argc> 1 ) {do_file (argv [1]); ++ argv; –argc;}} dönüş (0);} '| perl -p -e 's / \ {/ \ {\ n \ t / g; s / \; / \; \ n \ t / g; s / \ t \} / \} / g;'

            Selamlar 😀

      2.    Giskard dijo

        Sanırım Carlos, kodun ortaya çıktığı yerde girinti olmadığı anlamına geliyor. Kopyala ve yapıştır ile işe yaramaz. Bir gönderi oluştururken etiketin var olup olmadığını bilmiyorum dil kodunu girmek için. Yoksa koysalar iyi olur.

        1.    Giskard dijo

          Sorunun ne olduğunu zaten görmüştüm: KOD Etiketi tüm boşlukları ve sekmeleri kaldırıyor (bunu yapmamalı !!!) Ancak üzerine bir nbsp koyarsanız kod iyi görünüyor. Yazı tipine bağlı olabileceğini düşünmeme rağmen (bilmiyorum) onaltılık A0 (160 Aralık) Kullanılırsa şu şekilde çıkar:

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

          Testlerimde iyi görünüyor, ancak cevapları gönderirken bir önizlemem yok (ve öyle olmalı !!!) Çıkmazsa benim hatam değil

          1.    Marianogaudix dijo

            Sebastian Pölsterl'in PyGTK 3 eğitiminde verdiği örneklere bakın, Sebastian etiket koymuyor.

            Misal :

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

            Sebastian'ın tüm eğitimlerini görebilirsiniz.

          2.    Giskard dijo

            Ne demek istediğini bilmiyorum. Demek istediğim, burada, yazılarda "KOD" HTML Etiketi kullanılamaz, böylece kod olarak koyduğunuz ve iyi girintili çıksın. Başvurduğunuz sayfada, sayfa kaynaklarına bakarsanız, CODE kullanmadığını ancak diğer HTML sınırlayıcıları kullandığını göreceksiniz.
            Bu, koyduğunuz koda aykırı değil, daha ziyade bu sitenin gönderim sistemindeki bir kusuru işaret ediyor. Belki de yöneticiler düzeltebilir.
            Etiketler hakkında konuşurken açıkça Python'dan değil HTML'den bahsediyorum. Her durumda, Python'a girintisiz kod koyarsanız, işe yaramayacaktır. Bir acemi gelir ve kodu bu yayında göründüğü gibi kopyalar ve çalıştırmaya çalışırsa başarısız olur. Acemi olduğunuz için hayal kırıklığına uğrayabilirsiniz. Yine, hata senin değil; ve önceki cevabımda yaptığım şey, sorunu gönderen kullanıcı düzeyinden çözmenin bir yolunu vermekti.

          3.    Marianogaudix dijo

            Kesinlikle haklısın, kodu kopyalamak yerine fotoğrafları yüklemeliydim.
            PyGTK 3'te ifadelerin nasıl düzgün sıralandığını göstermek için.

  7.   felipe dijo

    Python ile programlamak için Eclipse'i PyDev eklentisiyle veya Pychar m ile kullanmanızı öneririm

  8.   louis dijo

    Yukarıda bahsedildiği gibi, bu yüzden girintiler nedeniyle python'u sevmiyorum. Gördüğümüz gibi C, Java, PHP vb. Diğer dillerde olan kopyalama ve yapıştırma işlemi çalışmayacaktır.

    Okunabilirlik meselesi, bir kod güzelleştirici uyguluyoruz (gibi http://indentcode.net/ ) ve hazır,

    Çirkin olan şey sabittir, ancak girinti yoksa ve mantık değiştirilirse, ses çıkarırız ...

  9.   Carlos dijo

    PyGTK'da yeniyim, bu dilde kabuk komut dosyalarıyla etkileşim kurmak mümkün mü?

    1.    Merhaba dijo

      Eğitim için teşekkürler.

      Selamlar.