PyGObject Kullanarak Linux Masaüstü Altında GUI Uygulamaları Nasıl Oluşturulur - Bölüm 1


Linux'ta uygulama oluşturmak farklı yollar kullanılarak yapılabilir, ancak sınırlı sayıda yöntem vardır; bu nedenle en basit ve en işlevsel programlama dillerini ve kitaplıklarını kullanmak, bu yüzden Linux altında uygulama oluşturma konusuna hızlı bir göz atacağız. “PyGObject” adı verilen Python programlama dili ile GTK+ kütüphanesini kullanan masaüstü.

PyGObject, Python gibi programlama dilleri için bağlama oluşturmak amacıyla GObject Introspection'ı kullanır, PyGObject, PyGTK'nın yeni neslidir, PyGObject=Python + GTK3 diyebilirsiniz.

Bugün, GTK+ kütüphanesini ve PyGobject dilini kullanarak Linux masaüstü altında GUI (Grafik Kullanıcı Arayüzü) uygulamaları oluşturmaya yönelik bir seriye başlayacağız, seri aşağıdaki konuları kapsayacak:

Python hakkında

Öncelikle Python'da bazı temel bilgilere sahip olmanız gerekir; Python çok modern ve kullanımı kolay bir programlama dilidir. Dünyanın en ünlü programlama dillerinden biridir; Python'u kullanarak birçok harika uygulama ve araç oluşturabileceksiniz. Codeacademy.com'daki gibi ücretsiz kurslara katılabilir veya Python ile ilgili bazı kitapları şu adresten okuyabilirsiniz:

GTK+ hakkında

GTK+, masaüstü uygulamaları için grafiksel kullanıcı arayüzleri oluşturmaya yönelik açık kaynaklı, platformlar arası bir araç setidir; ilk olarak 1998'de GIMP için bir GUI araç seti olarak başlatıldı, daha sonra diğer birçok uygulamada kullanıldı ve kısa sürede GUI'ler oluşturan en ünlü kütüphanelerden biri haline geldi. GTK+, LGPL lisansı altında yayınlandı.

Linux Altında GUI Uygulamaları Oluşturma

GTK+ ve Python kullanarak uygulama oluşturmanın 2 yolu vardır:

  1. Yalnızca kod kullanarak grafik arayüzün yazılması.
  2. Glade” programını kullanarak grafiksel arayüzün tasarlanması; GTK+ arayüzlerini kolayca tasarlamak için RAD aracı olan Glade, GUI'yi, GUI'yi oluşturmak için herhangi bir programlama diliyle kullanılabilecek bir XML dosyası olarak oluşturur; GUI'nin XML dosyasını dışa aktardıktan sonra, XML dosyasını bizim sunucumuza bağlayabileceğiz. İstediğimiz işleri yapabilecek program.

Her iki yolu da kısaca açıklayacağız.

Yalnızca Kod Yolu

GUI'yi yalnızca kod kullanarak yazmak, acemi programcılar için biraz zor olabilir ve çok zaman kaybettirir, ancak bunu kullanarak, programlarımız için Glade gibi bazı araçları kullanarak oluşturduklarımızdan daha fazla, çok işlevsel GUI'ler oluşturabiliriz.

Aşağıdaki örneği ele alalım.

#!/usr/bin/python
-*- coding: utf-8 -*-

from gi.repository import Gtk

class ourwindow(Gtk.Window):

    def __init__(self):
        Gtk.Window.__init__(self, title="My Hello World Program")
        Gtk.Window.set_default_size(self, 400,325)
        Gtk.Window.set_position(self, Gtk.WindowPosition.CENTER)

        button1 = Gtk.Button("Hello, World!")
        button1.connect("clicked", self.whenbutton1_clicked)

        self.add(button1)
        
    def whenbutton1_clicked(self, button):
      print "Hello, World!"

window = ourwindow()        
window.connect("delete-event", Gtk.main_quit)
window.show_all()
Gtk.main()

Yukarıdaki kodu kopyalayıp bir “test.py” dosyasına yapıştırın ve test.py dosyasında 755 iznini ayarlayın ve dosyayı daha sonra “./test.py ”, elde edeceğiniz şey budur.

nano test.py
chmod 755 test.py
./test.py

Düğmeye tıkladığınızda terminalde “Merhaba Dünya!” cümlesinin yazdırıldığını görürsünüz:

Kodu detaylı bir şekilde anlatayım.

  1. #!/usr/bin/python: Python yorumlayıcısının varsayılan yolu (çoğu durumda sürüm 2.7), bu satırın her Python dosyasındaki ilk satır olması gerekir.
  2. # -*- coding: utf-8 -*-: Burada dosyanın varsayılan kodlamasını ayarlıyoruz, İngilizce dışındaki dilleri desteklemek istiyorsanız UTF-8 en iyisidir, böyle bırakın .
  3. gi.repository'den import Gtk: Burada GTK 3 kütüphanesini programımızda kullanmak üzere içe aktarıyoruz.
  4. Class ourwindow(Gtk.Window): Burada “ourwindow” adını verdiğimiz yeni bir sınıf oluşturuyoruz, sınıf nesne tipini de “Gtk.Window” olarak ayarlıyoruz.
  5. def __init__(self): Yeni bir şey yok, burada ana pencere bileşenlerini tanımlıyoruz.
  6. Gtk.Window.__init__(self, title=”Merhaba Dünya Programım”): “Merhaba Dünya Programım” başlığını “bizim penceremiz” penceresine ayarlamak için bu satırı kullanıyoruz, siz değiştirebilirsiniz isterseniz başlığı.
  7. Gtk.Window.set_default_size(self, 400,325): Bu satırın açıklamaya ihtiyacı olduğunu düşünmüyorum, burada penceremiz için varsayılan genişlik ve yüksekliği ayarlıyoruz.
  8. Gtk.Window.set_position(self, Gtk.WindowPosition.CENTER): Bu satırı kullanarak pencerenin varsayılan konumunu ayarlayabileceğiz, bu durumda onu merkeze ayarlayacağız “Gtk.WindowPosition.CENTER” parametresini kullanarak dilerseniz “Gtk.WindowPosition.MOUSE” olarak değiştirerek fare imleci konumunda pencereyi açabilirsiniz.
  9. button1=Gtk.Button(“Merhaba, Dünya!”): Yeni bir Gtk.Button oluşturduk ve ona “button1” adını verdik, butonun varsayılan metni “Merhaba, Dünya! ”, isterseniz herhangi bir Gtk widget'ı oluşturabilirsiniz.
  10. button1.connect(“clicked”, self.whenbutton1_clicked): Burada “tıklandı” sinyalini “whenbutton1_clicked” eylemiyle bağlıyoruz, böylece düğme tıklandığında “whenbutton1_clicked” eylemi ortaya çıkıyor etkinleştirilir.
  11. self.add(button1): Gtk widget'larımızın görünmesini istiyorsak, onları varsayılan pencereye eklemeliyiz, bu basit satır “button1” widget'ını pencereye ekler, bunu yapmak çok gereklidir. Bunu yap.
  12. def Whenbutton1_clicked(self, Button): Şimdi burada “whenbutton1_clicked” eylemini tanımlıyoruz, “button1” widget'ına tıklandığında ne olacağını, yani “(self, Button) tanımlıyoruz. ) ” parametresi sinyal ana nesne tipini belirlemek için önemlidir.
  13. print “Merhaba Dünya!”: Burada daha fazla açıklama yapmama gerek yok.
  14. window=ourwindow(): Yeni bir global değişken oluşturmalı ve onu daha sonra GTK+ kütüphanesini kullanarak çağırabilmemiz için onu window() sınıfımıza ayarlamalıyız.
  15. window.connect(“delete-event”, Gtk.main_quit): Şimdi “delete-event” sinyalini “Gtk.main_quit ” eylemiyle bağlıyoruz, silmek için bu önemli Program penceremizi kapattıktan sonra tüm widget'ları otomatik olarak kapatıyoruz.
  16. window.show_all(): Pencere gösteriliyor.
  17. Gtk.main(): Gtk kütüphanesini çalıştırıyor.

İşte bu, kolay değil mi? Ve bazı büyük uygulamalar oluşturmak istiyorsak çok işlevseldir. Yalnızca kod yöntemini kullanarak GTK+ arayüzleri oluşturma hakkında daha fazla bilgi için aşağıdaki adresteki resmi dokümantasyon web sitesini ziyaret edebilirsiniz:

Python GTK3 Dersleri

Glade Tasarımcı Yolu

Yazının başında da söylediğim gibi Glade, programlarımız için ihtiyaç duyduğumuz arayüzleri oluşturmak için çok kolay bir araçtır, geliştiriciler arasında çok ünlüdür ve onu kullanarak birçok harika uygulama arayüzü oluşturulmuştur. Bu yola “Hızlı uygulama geliştirme” adı verilmektedir.

Kullanmaya başlamak için Glade'i Debian/Ubuntu/Mint çalıştırmasında kurmanız gerekir:

sudo apt­-get install glade

RedHat/Fedora/CentOS'ta şunu çalıştırın:

yum install glade

Programı indirip kurduktan ve çalıştırdıktan sonra solda mevcut Gtk widget'larını göreceksiniz, yeni bir pencere oluşturmak için “window” widget'ına tıklayın.

Yeni bir boş pencerenin oluşturulduğunu fark edeceksiniz.

Artık buna bazı widget'lar ekleyebilirsiniz, sol araç çubuğundaki “düğme” widget'ına tıklayın ve düğmeyi pencereye eklemek için boş pencereye tıklayın.

Düğme kimliğinin "button1" olduğunu fark edeceksiniz, şimdi sağ araç çubuğundaki Sinyaller sekmesine bakın ve "tıklandı" sinyalini arayın ve "button1_clicked ” ifadesini tıklayın.

Artık GUI'mizi oluşturduğumuza göre, onu dışa aktaralım. “Dosya” menüsüne tıklayın ve “Kaydet”i seçin, dosyayı ana dizininize “myprogram.glade” adıyla kaydedin ve çıkış.

Şimdi yeni bir “test.py” dosyası oluşturun ve içine aşağıdaki kodu girin.

#!/usr/bin/python
-*- coding: utf-8 -*-

from gi.repository import Gtk

class Handler:
    def button_1clicked(self, button):
      print "Hello, World!"

builder = Gtk.Builder()
builder.add_from_file("myprogram.glade")
builder.connect_signals(Handler())

ournewbutton = builder.get_object("button1")
ournewbutton.set_label("Hello, World!")

window = builder.get_object("window1")

window.connect("delete-event", Gtk.main_quit)
window.show_all()
Gtk.main()

Dosyayı kaydedin, daha önce olduğu gibi 755 izin verin ve “./test.py” kullanarak çalıştırın, elde edeceğiniz şey budur.

nano test.py
chmod 755 test.py
./test.py

Düğmeye tıkladığınızda terminalde “Merhaba Dünya!” cümlesinin yazdırıldığını göreceksiniz.

Şimdi yeni şeyleri açıklayalım:

  1. sınıf İşleyicisi: Burada GUI için oluşturduğumuz eylem ve sinyallerin tanımlarını içerecek “Handler” adında bir sınıf oluşturuyoruz.
  2. builder=Gtk.Builder(): Bir Gtk.Builder widget'ı olan “builder” adında yeni bir global değişken oluşturduk, .glade dosyasını içe aktarmak için bu önemlidir.
  3. builder.add_from_file(“myprogram.glade”): Burada, programımız için varsayılan GUI olarak kullanmak üzere “myprogram.glade” dosyasını içe aktarıyoruz.
  4. builder.connect_signals(Handler()): Bu satır .glade dosyasını handler sınıfına bağlar, böylece “Handler” sınıfı altında tanımladığımız eylemler ve sinyaller programı çalıştırdığımızda düzgün çalışır. .
  5. ournewbutton=builder.get_object(“button1”): Şimdi “button1” nesnesini .glade dosyasından içe aktarıyoruz, ayrıca onu kullanmak için “ournewbutton” global değişkenine de aktarıyoruz. Daha sonra programımızda.
  6. ournewbutton.set_label(“Merhaba Dünya!”): Varsayılan düğme metnini “Merhaba Dünya! " cümle.
  7. window=builder.get_object(“window1”): Burada daha sonra programda gösterebilmek için .glade dosyasından “window1” nesnesini çağırdık.

Ve bu kadar! Linux altında ilk programınızı başarıyla oluşturdunuz!

Elbette bir şeyler yapan gerçek bir uygulama oluşturmak için yapılması gereken çok daha karmaşık şeyler var, bu yüzden aşağıdaki adresteki GTK+ belgelerine ve GObject API'sine göz atmanızı öneririm:

  1. GTK+ Referans Kılavuzu
  2. Python GObject API Referansı
  3. PyGObject Referansı

Daha önce Linux masaüstü altında herhangi bir uygulama geliştirdiniz mi? Bunu yapmak için hangi programlama dili ve araçları kullanıldı? Python ve GTK 3 kullanarak uygulama oluşturma hakkında ne düşünüyorsunuz?