PyQt5 Örneklerle Eğitim: Oluşturma Python Qt ile GUI'ler

⚡ Akıllı Özet

PyQt bir Python Geliştiricilerin yerel masaüstü grafik kullanıcı arayüzleri (GUI) oluşturmasına olanak tanıyan, platformlar arası Qt widget araç seti için bir bağlayıcıdır. Altı yüzden fazla widget'ı kapsar. C++ Pencereler, düğmeler, düzenler, sinyaller, yuvalar ve temaları kapsayan dersler Windows, macOSve Linux.

  • 🔘 PyQt nedir? A Python Qt için bağlama C++ Riverbank Computing tarafından sürdürülen çerçeve.
  • ☑️ Sürümleri: PyQt4, Qt 4.x ve 5.x sürümlerini destekler; PyQt5 ise yalnızca Qt 5.x serisini hedefler.
  • Kurulum: Pip paket yöneticisi, tek bir komutla PyQt5'i bir wheel dosyasından kurar.
  • 🧪 İlk uygulama: QApplication ve QWidget, ekranda temel bir pencere oluşturur ve görüntüler.
  • Signals ve yuvalar: Widget olayları, bağlantı kuran sinyaller üretir. Python yuva fonksiyonları.
  • 🤖 Yapay zekâya hazır: PyQt, makine öğrenimi modellerini çalıştıran ve görselleştiren masaüstü ön uç uygulamaları oluşturur.

PyQt5 Eğitimi

Aşağıdaki bölümler, PyQt'nin temellerinden başlayarak kurulum, temel bileşenler, düzenler ve temalar da dahil olmak üzere çalıştırılabilir örneklerle size yol gösterecektir.

PyQt nedir?

PyQT bir Python Aynı zamanda platformlar arası uygulama geliştirme çerçevesi olarak da işlev gören açık kaynaklı widget-araç seti Qt'nin bağlanması. Qt popüler bir C++ Başlıca masaüstü, mobil ve gömülü platformların tümü için GUI uygulamaları yazmaya yönelik bir çerçeve (Linux'u destekler, Windows, macOS, Android, iOS, Raspberry Pi ve daha fazlası).

PyQt, İngiltere merkezli Riverbank Computing şirketi tarafından geliştirilen ve sürdürülen ücretsiz bir yazılımdır; Qt ise Finlandiya merkezli The Qt Company adlı bir firma tarafından geliştirilmiştir.

PyQt'nin Özellikleri

PyQt'un önemli özellikleri şunlardır:

PyQt, aşağıdakiler gibi çeşitli özellikleri kapsayan altı yüzden fazla sınıftan oluşmaktadır:

  • Grafik Kullanıcı Arayüzleri
  • SQL Veritabanları
  • Web araç setleri
  • XML işleme

Bu özellikler, gelişmiş kullanıcı arayüzleri ve bağımsız uygulamalar oluşturmak için birleştirilebilir. Tüm sektörlerdeki birçok büyük şirket Qt kullanıyor. LG, Mercedes, AMD, Panasonic ve Harman bunlardan bazı örneklerdir.

PyQt Sürümleri

PyQt, PyQt4 ve PyQt5 olmak üzere iki sürümde mevcuttur. PyQt4, Qt çerçevesinin 4.x ve 5.x sürümlerini bağlamak için bağlantı kodu sağlarken, PyQt5 yalnızca 5.x sürümleri için bir bağlantı sağlar. Sonuç olarak, PyQt5, eski sürümün kullanımdan kaldırılmış modülleriyle geriye dönük uyumlu değildir. Bu PyQt GUI eğitiminde, örneklerin gösterimi için PyQt5 kullanılacaktır. Bu iki sürümün dışında, Riverbank Computing ayrıca PyQt3D'yi de sunmaktadır. Python Qt3D çerçevesi için bağlamalar. Qt3D, 2D/3D görüntülemeyle gerçek zamanlı simülasyon sistemleri oluşturmak için kullanılan bir uygulama çerçevesidir.

PyQt5 nasıl kurulur

Bu PyQt5 eğitiminde PyQt kurulumunun iki yolunu göreceğiz:

  • Tekerlek dosyalarını kullanma
  • Kaynaktan Oluşturma ve Yükleme

Qt (cute olarak telaffuz edilir) karmaşık bir sistemdir ve PyQt kod tabanı derlenmiş C++ hem de Python kaputun altındaki kod. Sonuç olarak, onu kaynaktan oluşturmak ve kurmak diğerlerine kıyasla karmaşık bir süreçtir. Python kütüphaneler. Ancak PyQt5'i tekerlekleri kullanarak kolayca kurabilirsiniz.

Tekerlekli kurulum

Tekerlekler yeni standarttır Python paketleme ve dağıtım biçimi. Basitçe söylemek gerekirse, bir tekerlek özel bir adı ve . olan bir ZIP arşividir.naber dosya uzantısı. Tekerlekler pip (Python'ın paket yöneticisi), varsayılan olarak son sürümlerine dahil edilmiştir. Python.

Yani, eğer varsa Python 3.4 veya üzeri yüklüyse, zaten pip'iniz var. Ancak, daha eski bir sürüm kullanıyorsanız PythonDevam etmeden önce pip'i indirip kurmanız gerekiyor. Talimatları şu bağlantıdan bulabilirsiniz: https://pypi.org/project/pip/.

PyQt5'i yüklemek için:

) 1 Adım Komut istemini açın.
Komut İstemi'ni veya PowerShell'i açın Windows makinesi.

PyQt5'i yükleyin

) 2 Adım Aşağıdakileri yazın.

 pip install PyQt5

) 3 Adım Kurulum başarılı.
Bu PyQt5 eğitimindeki bu adım, PyQt5 whl paketini (yaklaşık 50 MB) indirecek ve sisteminize kuracaktır.

PyQt5'i yükleyin

Alternatif olarak, bir de indirebilirsiniz Windows sürümü için ikili Python bilgisayarınıza yüklendi.

Tamamlandığında, ilk GUI uygulamanızı yazmak için bu PyQt5 eğitimindeki bir sonraki bölüme geçin.

Temel PyQt Concepts ve Programlar

PyQt5'i bilgisayarınıza başarıyla kurduğunuza göre, artık yazmaya hazırsınız. Python GUI uygulamaları.

Bu PyQt5 eğitimine, ekranınızda boş bir pencere görüntüleyecek basit bir uygulama ile başlayalım.

ateş et Python IDLE ve aşağıdakileri yazın:

1 programı

import sys
from PyQt5.QtWidgets import QApplication, QWidget
if __name__ == "__main__":
    app = QApplication(sys.argv)
    w = QWidget()
    w.resize(300,300)
    w.setWindowTitle("Guru99")
    w.show()
    sys.exit(app.exec_())

Dosyayı app.py olarak kaydedin (ad önemli değil) ve programı çalıştırmak için F5 tuşuna basın. Alternatif olarak, uygulamayı başlatmak için kaydettiğiniz dosyaya çift tıklayın. Her şeyi doğru yaptıysanız, "app.py" başlıklı yeni bir pencere açılacaktır. GuruAşağıda gösterildiği gibi 99.

Temel PyQt Concepts

Harika! Çalışıyor. Çok fazla bir şey değil, ama temelleri kavramak için yeterli. Şimdi bu PyQt eğitiminde, programınızdaki her bir satırın ne yaptığını ayrıntılı olarak inceleyelim.

from PyQt5.QtWidgets import QApplication, QWidget

Bu ifade, bir GUI oluşturmak için ihtiyaç duyduğunuz tüm modülleri geçerli ad alanına aktarır. QtWidgets modülü bu derste kullanacağınız tüm önemli widget'ları içerir. Python Qt öğretici.

app = QApplication(sys.argv)

Burada QApplication sınıfının bir nesnesini yaratıyorsunuz. Bu adım PyQt5 için bir zorunluluktur; Her UI uygulaması, uygulamaya bir tür giriş noktası olarak bir QApplication örneği oluşturmalıdır. Oluşturmazsanız hatalar gösterilecektir.

sys.argv, uygulamayı kabuk aracılığıyla başlatırken veya arayüzü otomatikleştirirken uygulamaya iletebileceğiniz komut satırı parametrelerinin listesidir.

Bu PyQt5 örneğinde, QApplication'a herhangi bir argüman geçirmediniz. Bu nedenle, aşağıdaki kodla da değiştirebilir ve sys modülünü içe aktarmanıza bile gerek kalmaz.

app = QApplication([])
w = QWidget()

Sonra, QWidget sınıfının bir nesnesini yaparız. QWidget, Qt'deki tüm UI nesnelerinin temel sınıfıdır ve bir uygulamada gördüğünüz hemen hemen her şey bir widget'tır. Buna diyaloglar, metinler, düğmeler, çubuklar vb. dahildir. Karmaşık kullanıcı arayüzleri tasarlamanıza olanak tanıyan özellik, widget'ların iç içe geçebilmesidir, yani bir widget'ın içinde başka bir widget'ın içinde bulunan bir widget'ınız olabilir. Bunu bir sonraki bölümde eylem halinde göreceksiniz.

w.resize(300,300)

QWidget sınıfının yeniden boyutlandırma yöntemi, herhangi bir widget'in boyutlarını ayarlamanıza olanak tanır. Bu durumda pencereyi 300 x 300 piksel olarak yeniden boyutlandırdınız.

Burada, widget'ların iç içe yerleştirilebileceğini hatırlamanız gerekir; en dıştaki widget (yani ebeveyni olmayan widget) Pencere olarak adlandırılır.

w.setWindowTitle("Guru99")

`setWindowTitle()` metodu, argüman olarak bir dize geçirmenize olanak tanır ve bu dizeyi pencerenin başlığı olarak ayarlar. PyQt5 örneğinde, başlık çubuğu şu şekilde görüntülenecektir: Guru99

w.show()

show() basitçe widget'ı monitör ekranında görüntüler.

sys.exit(app.exec_())

app.exec_() yöntemi Qt/'yi başlatır.C++ olay döngüsü. Bildiğiniz gibi PyQt büyük oranda şu şekilde yazılmıştır: C++ ve paralel yürütmeyi uygulamak için olay döngüsü mekanizmasını kullanır. `app.exec_()` kontrolü Qt'ye devreder ve uygulama yalnızca kullanıcı GUI'den kapattığında sonlanır. Bu nedenle, diğer uygulamalarda olduğu gibi Ctrl+C uygulamayı kapatmaz. Python programlar. Qt uygulama üzerinde kontrole sahip olduğundan, Python olaylar, biz onları uygulamanın içinde ayarlamadığımız sürece işlenmez. Ayrıca exec yönteminin adında bir alt çizgi bulunduğunu unutmayın; bunun nedeni exec() işlevinin zaten bir anahtar kelime olmasıdır. Python Alt çizgi ise isim çakışmasını çözüyor.

Boş pencerelerin ötesinde

Önceki bölümde, Qt'de temel bir widget'ın nasıl oluşturulacağını gördünüz. Şimdi, kullanıcıların gerçekten etkileşim kurabileceği daha karmaşık arayüzler oluşturmanın zamanı geldi. Tekrar, Qt uygulamanızı çalıştırın. IDLE ve aşağıdakileri yazın.

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QPushButton, QMessageBox

def dialog():
    mbox = QMessageBox()

    mbox.setText("Your allegiance has been noted")
    mbox.setDetailedText("You are now a disciple and subject of the all-knowing Guru")
    mbox.setStandardButtons(QMessageBox.Ok | QMessageBox.Cancel)
            
    mbox.exec_()

if __name__ == "__main__":
    app = QApplication(sys.argv)
    w = QWidget()
    w.resize(300,300)
    w.setWindowTitle("Guru99")
    
    label = QLabel(w)
    label.setText("Behold the Guru, Guru99")
    label.move(100,130)
    label.show()

    btn = QPushButton(w)
    btn.setText('Beheld')
    btn.move(110,150)
    btn.show()
    btn.clicked.connect(dialog)

    
    w.show()
    sys.exit(app.exec_())

Dosyayı appone.py veya istediğiniz başka bir isimle kaydedin ve programı çalıştırmak için F5 tuşuna basın. Herhangi bir hata yapmadıysanız, IDLE aşağıda gösterildiği gibi bir miktar metin ve bir düğme içeren yeni bir pencere açılacaktır.

Boşun ötesinde Windows

  1. İlk penceredeki butona tıkladığınızda yazdığınız metnin yer aldığı yeni bir mesaj kutusu açılacak.
  2. Artık ek metnin görünürlüğünü değiştirmek için Ayrıntıları Gizle/Ayrıntıları Göster düğmesine tıklayabilirsiniz.

Gördüğünüz gibi, mesaj kutusunda herhangi bir pencere başlığı belirlemediğimiz için varsayılan bir başlık otomatik olarak sağlandı. Python kendisi.

Şimdi çalıştığına göre, önceki PyQt5 örneğine eklediğiniz ekstra koda bir göz atalım.

from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QPushButton, QMessageBox

Bu, PyQt5 örneklerinde kullandığınız diğer bazı widget'ları (QLabel, QPushButton ve QMessage) içe aktarır.Box.

def dialog():
    mbox = QMessageBox()

    mbox.setText("Your allegiance has been noted")
    mbox.setDetailedText("You are now a disciple and subject of the all-knowing Guru")
    mbox.setStandardButtons(QMessageBox.Ok | QMessageBox.Cancel)
            
    mbox.exec_()

Burada, bir mesaj kutusu bileşeni oluşturan ve düğmelere ve diğer alanlara bazı metinler ekleyen dialog adında bir yöntem tanımladınız.

Diyalog yöntemi, belirli bir widget'ta (bu durumda btn PushButton) bir düğmeye basıldığında programın ana bloğundan çağrılır. Bu düğmede tetiklenen click olayı bu işlevin yürütülmesine neden olur. Böyle bir fonksiyona Qt'de slot adı verilir ve hakkında daha fazla bilgi edineceksiniz. sinyalleri hem de yuvaları önümüzdeki paragraflarda.

if __name__ == "__main__":
    app = QApplication(sys.argv)
    w = QWidget()
    w.resize(300,300)
    w.setWindowTitle("Guru99")

Bu, uygulamanın ana bölümüdür ve önceki örnekte olduğu gibi, önce bir QApplication örneği, ardından basit bir widget, yani bir QWidget örneği oluşturarak başlarsınız.

label = QLabel(w)
    btn = QPushButton(w)

Bu uygulamaya iki yeni widget eklediniz: QLabel ve QPushButton. QLabel, bir widget içindeki düzenlenemeyen metni veya yer tutucuları yazdırmak için kullanılırken, QPushButton tıklanabilir bir düğme oluşturmak için kullanılır.

Burada dikkat edilmesi gereken kritik nokta, label ve btn nesnelerini oluşturduğunuzda, window nesnesini (w) QLabel ve QPushButton yapıcılarına aktarıyor olmanızdır. PyQt5'te yuvalama bu şekilde çalışır. Başka bir widget'ın içinde bir widget oluşturmak için ana widget'ın referansını çocuğun yapıcısına iletirsiniz.

label.move(100,130)
btn.move(110,150)

move(), bir widget'in ana widget'a göre konumunu ayarlamak için kullanılır. İlk durumda, etiket pencerenin solundan 100 piksel ve üstünden 130 piksel taşınacaktır.

Benzer şekilde, düğme pencerenin solundan 110 piksel ve üst kısmından 150 piksel uzağa yerleştirilecektir. Bu örnek, yerleşim planlarını elde etmenin kaba bir yoludur ve genellikle üretimde kullanılmaz; buraya yalnızca öğrenme amacıyla dahil edilmiştir. Qt, bu PyQt eğitiminin gelecek bölümlerinde ayrıntılı olarak göreceğiniz farklı düzenleri destekler.

btn.clicked.connect(dialog)

Son olarak, bu Qt'de sinyaller ve yuvalara bir örnektir. Grafik kullanıcı arayüzüne (GUI) dayalı uygulamalarda, fonksiyonlar kullanıcının gerçekleştirdiği eylemlere göre yürütülür; örneğin bir öğenin üzerine gelmek veya bir düğmeye tıklamak gibi. Bu eylemlere fonksiyonlar denir. olaylar. app.exec_() yönteminin kontrolü Qt'ye aktardığını hatırlayın. olay döngü. Olay döngüsünün amacı budur: olayları dinlemek ve yanıt olarak eylemler gerçekleştirmek.

Bir kullanıcının bir düğmeye tıklaması gibi bir olay meydana geldiğinde, karşılık gelen Qt widget'ı bir işaret. Bu sinyaller aşağıdakilere bağlanabilir: Python fonksiyonlar (bu örnekteki diyalog fonksiyonu gibi) böylece bir sinyal tetiklendiğinde fonksiyon yürütülür. Bu işlevler denir yuvaları Qt dilinde.

Dolayısıyla, bir olaydan gelen sinyale yanıt olarak bir slot fonksiyonunu tetiklemek için temel sözdizimi aşağıdaki gibidir:

 widget.signal.connect(slot)

Bu, ne zaman bir işaret bir tarafından tetiklenir Widget, bağlı yarık fonksiyon yürütülecektir. Özetle, sinyaller ve yuvalar Qt tarafından nesneler arasında iletişim kurmak ve bileşenlerin yeniden kullanılabilirliğini ve etkileşimini kolaylaştırmak için kullanılır.

Artık widget'ları nasıl yerleştireceğinizi ve sinyalleri ve yuvaları kullanarak etkileşimleri nasıl uygulayacağınızı bildiğinize göre, PyQt uygulamalarınızda kullanabileceğiniz faydalı widget'ların ve diğer sınıfların bir listesini burada bulabilirsiniz.

Bileşenler ve Widget'lar

PyQt'ta GUI uygulamaları oluşturmak için çok sayıda widget bulunmaktadır. Ancak PyQt5 ile sınıfların farklı modüller halinde yeniden karıştırılması ve lisanslarda revizyonlar yapıldı.

Bu nedenle, PyQt5'in yapısına dair genel bir bakış açısına sahip olmak çok önemlidir. Bu bölümde, PyQt5'in iç yapısının nasıl organize edildiğini görecek ve PyQt5 tarafından sağlanan farklı modüller, kütüphaneler ve API sınıfları hakkında bilgi edineceksiniz.

PyQt5 Dizin Yapısı

PyQt5 Dizin Yapısı

Bunlar, tarafından kullanılan temel modüllerdir. PythonQt bağlaması, özellikle PyQt5.

  • QtAşağıda belirtilen tüm sınıfları/modülleri tek bir modülde birleştirir. Bu, uygulamanın kullandığı belleği önemli ölçüde artırır. Ancak, yalnızca bir modülü içe aktararak çerçeveyi yönetmek daha kolaydır.
  • QtCore: Diğer modüller tarafından kullanılan temel grafiksel olmayan sınıfları içerir. Burası Qt olay döngüsünün, sinyallerin ve yuva bağlantısının vb. uygulandığı yerdir.
  • QtWidget'larPyQt5'te bulunan widget'ların çoğunu içerir.
  • QtGui: GUI bileşenlerini içerir ve QtCore modülünü genişletir.
  • QtNetwork: Qt aracılığıyla ağ programlamayı uygulamak için kullanılan sınıfları içerir. TCP sunucularını, TCP yuvalarını, UDP yuvalarını, SSL işlemeyi, ağ oturumlarını ve DNS aramalarını destekler.
  • QtMultimedyaDüşük seviyeli multimedya işlevselliği sağlar.
  • QtSql: SQL veritabanları için veritabanı entegrasyonunu uygular. ODBC'yi destekler, MySQL, Oracle, SQLite, ve PostgreSQL.

PyQt5 Widget'ları

İşte PyQt5'te en sık kullanılan widget'ların listesi:

  • QLineDüzenle: Kullanıcının tek satırlık metin girmesine olanak sağlayan giriş alanıdır.
line = QLineEdit()
  • QRadioButtonBu, HTML'deki radyo düğmelerine benzer şekilde, seçilebilir bir düğmeye sahip bir giriş alanıdır.
rad = QRadioButton("button title")
rad.setChecked(True)  #to select the button by default.
  • QComboBox: Seçilebilir öğelerin listesini içeren bir açılır menüyü görüntülemek için kullanılır.
drop = QComboBox(w)
drop.addItems(["item one", "item two", "item three"])
  • QKontrolBox: Seçili olduğunda işaretlenen etiketin önünde, radyo düğmelerine benzer şekilde seçilebilir bir kare kutu görüntüler.
check = QCheckBox("button title")
  • QMenüBarPencerenin üst kısmında yatay bir menü çubuğu görüntüler. Bu çubuğa yalnızca QMenu sınıfına ait nesneler ekleyebilirsiniz. Bu QMenu nesneleri ayrıca metin dizeleri, QAction nesneleri veya diğer QMenu nesnelerini içerebilir.
  • QToolBar: Pencere içerisinde hareket ettirilebilen yatay çubuk veya bölmedir. Düğmeler ve diğer widget'lar içerebilir.
  • QTabBu özellik, bir pencerenin içeriğini, pencerenin üst kısmındaki farklı sekmeler aracılığıyla erişilebilen birden fazla sayfaya bölmek için kullanılır. İki bölümden oluşur: sekme çubuğu ve sekme sayfası.
  • QScrollBarBu, kullanıcının bir pencere içinde yukarı ve aşağı kaydırmasını sağlayan kaydırma çubukları oluşturmak için kullanılır. Hareketli bir kaydırıcıdan ve bir kaydırıcıdan oluşur. track ve kaydırıcıyı yukarı veya aşağı kaydırmak için iki düğme.
scroll = QScrollBar()
  • QSplitter: Ayırıcılar, widget'ların düzgün bir şekilde gruplandırılması ve karmaşık görünmemesi için bir pencerenin içeriğini ayırmak için kullanılır. QSplitter, PyQt5'te bulunan birincil düzen işleyicilerinden biridir ve içeriği hem yatay hem de dikey olarak bölmek için kullanılır.
  • QDockYerleştirme widget'ı, iki özelliğe sahip bir alt penceredir: ana pencere içinde hareket ettirilebilir ve ana pencerenin dışında, ekranın başka bir yerine yerleştirilebilir.

Düzenler ve Temalar

Önceki PyQt5 örneklerinde, GUI'nizdeki widget'ların konumlarını ayarlamak için yalnızca move() ve resize() yöntemlerini kullanıyordunuz.

Ancak PyQt, uygulamalar için gelişmiş kullanıcı arayüzleri oluşturmak için kullanılabilecek sağlam bir düzen yönetimi motoruna sahiptir. Bu bölümde, Qt'da düzenleri oluşturmak ve yönetmek için kullanılan iki önemli sınıfı öğreneceksiniz.

  1. QBoxDüzen
  2. QGrid Düzeni

QBoxDüzen

QBoxDüzen, düzenin alt bileşenlerini yatay veya dikey bir satırda hizalamak için kullanılır. Q'dan miras kalan iki ilgi sınıfıBoxDüzen:

  • QHBoxDüzen: alt widget'ları yatay olarak hizalamak için kullanılır.
  • QVBoxDüzen: alt widget'ları dikey olarak hizalamak için kullanılır.

Örneğin, üç düğme QH ile bu şekilde hizalanıyorBoxDüzen görünecek.

QBoxDüzen

import sys
from PyQt5.QtWidgets import *

if __name__ == "__main__":

    app = QApplication([])
    w = QWidget()
    w.setWindowTitle("Musketeers")

    btn1 = QPushButton("Athos")
    btn2 = QPushButton("Porthos")
    btn3 = QPushButton("Aramis")

    hbox = QHBoxLayout(w)

    hbox.addWidget(btn1)
    hbox.addWidget(btn2)
    hbox.addWidget(btn3)

    w.show()

    sys.exit(app.exec_())

Ve QV'de bu şekilde görüneceklerBoxDüzen.

QBoxDüzen

import sys
from PyQt5.QtWidgets import *

if __name__ == "__main__":

    app = QApplication([])
    w = QWidget()
    w.setWindowTitle("Musketeers")

    btn1 = QPushButton("Athos")
    btn2 = QPushButton("Porthos")
    btn3 = QPushButton("Aramis")

    vb = QVBoxLayout(w)

    vb.addWidget(btn1)
    vb.addWidget(btn2)
    vb.addWidget(btn3)

    w.show()

    sys.exit(app.exec_())

Bu noktada açıklamaya ihtiyaç duyan tek işlev addWidget() yöntemidir. H'ye widget eklemek için kullanılırBox veya VBox düzen. Bir sonraki bölümde göreceğiniz gibi farklı sayıda parametre aldığı diğer düzenlerde de kullanılır. Widget'lar düzenin içinde onları eklediğiniz sıraya göre görünecektir.

QGrid Düzeni

QGridLayout, widget'ların bir ızgara biçiminde (bir matris veya 2B dizi gibi) düzenlendiği arayüzler oluşturmak için kullanılır. Bir ızgara düzenine öğe eklemek için, ızgaradaki satır ve sütunların sayısını ve bu öğelerin konumunu tanımlamak üzere matris gösterimini kullanabilirsiniz.

Örneğin, 3*3'lük bir ızgara (yani üç satır ve üç sütundan oluşan bir ızgara) oluşturmak için aşağıdaki kodu yazacaksınız:

Import sys
from PyQt5.QtWidgets import *

if __name__ == "__main__":
    app = QApplication([])

    w = QWidget()

    grid = QGridLayout(w)

    for i in range(3):
        for j in range(3):
            grid.addWidget(QPushButton("Button"),i,j)


    w.show()
    sys.exit(app.exec_())

Bu çıktı olacaktır:

QGrid Düzeni

Izgara düzenindeki addWidget() yöntemi şu argümanları alır:

  • Izgaraya eklemek istediğiniz widget nesnesi
  • Nesnenin x koordinatı
  • Nesnenin y koordinatı
  • Satır aralığı (varsayılan = 0)
  • Sütun aralığı (varsayılan = 0)

Daha iyi anlamak için, aşağıda gösterildiği gibi her bir bileşeni manuel olarak ekleyebilirsiniz.

import sys
from PyQt5.QtWidgets import *

if __name__ == "__main__":
    app = QApplication([])

    w = QWidget()

    grid = QGridLayout(w)
    grid.addWidget(QPushButton("Button one"),0,0)
    grid.addWidget(QPushButton("Button two"),0,1)
    grid.addWidget(QPushButton("Button three"),1,0)
    grid.addWidget(QPushButton("Button four"),1,1)


    w.show()
    sys.exit(app.exec_())

Izgara şöyle görünecek:

QGrid Düzeni

Birden fazla satır veya sütunu yaymak için rowspan ve colspan parametrelerini addWidget() işlevine de iletebilirsiniz.

Örneğin,

grid.addWidget(QPushButton("Button five"),2,0,1,0)

Bu, her iki sütuna da uzanan bir düğme oluşturacaktır.

QGrid Düzeni

Temalar

PyQt5, uygulamalarınızda kullanabileceğiniz bazı yerleşik temalarla birlikte gelir. setStyle() QApplication örneğinde çağrılan yöntem, uygulamanıza belirli bir tema ayarlamak için kullanılır.

Örneğin, aşağıdaki kod satırını eklemek, uygulamanızın temasını varsayılandan Fusion'a değiştirecektir.

app.setStyle("Fusion")

Önceki örnek Fusion temasında işte böyle görünecek.

Temalar

Uygulamalarınıza tema eklemek için kullanışlı bir diğer işlev de setPalette() yöntemidir. İşte setPalette() kullanarak farklı widget'ların rengini değiştirmek için kod:

import sys
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import *
from PyQt5.QtGui import QPalette

if __name__ == "__main__":
    app = QApplication([])
    app.setStyle("Fusion")
    
    qp = QPalette()
    qp.setColor(QPalette.ButtonText, Qt.black)
    qp.setColor(QPalette.Window, Qt.black)
    qp.setColor(QPalette.Button, Qt.gray)
    app.setPalette(qp)

    w = QWidget()

    grid = QGridLayout(w)
    grid.addWidget(QPushButton("Button one"),0,0)
    grid.addWidget(QPushButton("Button two"),0,1)
    grid.addWidget(QPushButton("Button three"),1,0)
    grid.addWidget(QPushButton("Button four"),1,1)


    w.show()
    sys.exit(app.exec_())

İşte sonuç.

Temalar

setPalette() yöntemini kullanmak için öncelikle bir palet tanımlamanız gerekir. Bu, QPalette sınıfının bir nesnesini oluşturarak yapılır.

 qp = QPalette()

QPalette sınıfının QtGui modülüne ait olduğunu ve bunun çalışması için onu içe aktarmanız gerektiğini unutmayın. QPalette nesnesini oluşturduktan sonra, rengini değiştirmek istediğiniz widget'ın adını ve ayarlamak istediğiniz rengi geçirmek için setColor() yöntemini kullanın.

 qp.setColor(QPalette.Window, Qt.black)

Bu işlem pencerenin rengini siyaha değiştirecektir. Renk şemanızı tanımladıktan sonra, paleti uygulamanıza uygulamak için setPalette() işlevini kullanın.

app.setPalette(qp)

Uygulamanız için bazı temel temalar oluşturmak istiyorsanız yapmanız gereken tek şey budur. PyQt ayrıca widget'larınızın görünümünü tanımlamak için stil sayfaları kullanmanıza da olanak tanır. CSS'ye aşinaysanız, Qt Style Sheets'i kullanarak uygulamanız için gelişmiş stilleri kolayca tanımlayabilirsiniz.

SSS

Tkinter gemileri şunlarla birlikte gelir: Python Küçük ve basit araçlar için uygundur. PyQt ise çok daha fazla bileşen, görsel tasarımcı ve yerel bir görünüm sunarak büyük, profesyonel masaüstü uygulamaları için daha iyi bir seçenektir; ancak bunun bedeli daha dik bir öğrenme eğrisi ve GPL lisanslamasıdır.

İkisi de aynı Qt kütüphanelerini kullanır ve neredeyse aynı API'leri paylaşır. Temel fark lisanslamadadır: PyQt, GPL veya ücretli ticari bir lisans kullanırken, PySide (Qt için) farklı bir lisans kullanır. PythonLGPL lisansını kullanır ve bu sayede kapalı kaynak kodlu yazılımın ücretsiz dağıtımına olanak tanır.

Qt Designer, düzeninizi XML .ui dosyası olarak kaydeden sürükle ve bırak aracıdır. Bunu dönüştürün Python pyuic5 yardımcı programı ile yükleyin veya uic.loadUi() kullanarak çalışma zamanında yükleyin.

PyQt6, daha yeni Qt 6 çerçevesini bağlar ve Qt.AlignmentFlag.AlignLeft gibi tam kapsamlı enum'lar gerektirir. PyQt5, Qt 5'i hedefler ve en yaygın kullanılan sürüm olmaya devam etmektedir. PyQt6 ayrıca bazı kullanımdan kaldırılmış modülleri kaldırır ve daha iyi yüksek DPI desteği ekler.

PyInstaller kullanın: Komut dosyanızı, PyQt5'i ve Qt kütüphanelerini tek bir çalıştırılabilir dosyada birleştirmek için `pyinstaller –onefile –windowed app.py` komutunu çalıştırın. `--windowed` bayrağı konsolu gizler. `fbs` ve `cx_Freeze` popüler alternatiflerdir.

PyQt5, temel bilgilere sahipseniz yeni başlayanlar için uygundur. PythonSınıfları, nesneleri ve sinyal-yuva desenini anlamak en çok yardımcı olur. Qt Designer, düzenleri görsel olarak oluşturmanıza olanak tanır, böylece her bir bileşeni elle ustalaşmadan önce çalışan pencereler oluşturabilirsiniz.

PyQt, makine öğrenimi modelleri için masaüstü arayüzleri oluşturur; veri yükleyen, eğitim veya çıkarım işlemlerini başlatan ve tahminleri, grafikleri veya görüntüleri gösteren panolar sunar. NumPy, pandas ve Matplotlib ile iyi bir uyum sağlar ve bu kütüphaneleri sarmalar.ping Kullanıcı dostu bir grafik arayüzünde eğitilmiş bir model.

Evet. GitHub Copilot, QApplication kurulumu, widget oluşturma ve sinyal-slot bağlantıları gibi yaygın PyQt5 kalıplarını bir yorumdan veya fonksiyon adından otomatik olarak tamamlar. Düzenlerin ve olay işleyicilerinin amaçlandığı gibi davrandığını doğrulamak için oluşturulan pencereyi her zaman çalıştırın.

Bu yazıyı şu şekilde özetleyin: