Örneklerle PyQt5 Eğitimi: PyQt kullanarak GUI tasarlama Python

PyQt nedir?

PyQT açık kaynaklı widget-toolkit Qt'nin bir python bağlamasıdır ve aynı zamanda çapraz platform uygulama geliştirme çerçevesi olarak da işlev görür. Qt popüler bir C++ Tüm büyük masaüstü, mobil ve gömülü platformlar için GUI uygulamaları yazmaya yönelik çerçeve (Linux'u destekler, Windows, Mac os işletim sistemi, Android, iOS, Raspberry Pi ve daha fazlası).

PyQt, İngiltere merkezli bir şirket olan Riverbank Computing tarafından geliştirilen ve bakımı yapılan ücretsiz bir yazılımdır; Qt ise The Qt Company adlı bir Fin firması tarafından geliştirilmiştir.

PyQT'nin Özellikleri

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

Aşağıdaki gibi bir dizi özelliği kapsayan altı yüzün üzerinde sınıftan oluşan PyQt'yi öğrenin

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

Bu özellikler, gelişmiş kullanıcı arayüzlerinin yanı sıra bağımsız uygulamalar oluşturmak için birleştirilebilir. Tüm sektörlerdeki birçok büyük şirket Qt kullanıyor. Bazı örnekler LG, Mercedes, AMD, Panasonic, Harman vb.'dir.

PyQt Sürümleri

PyQt'un PyQt4 ve PyQt5 olmak üzere iki sürümü mevcuttur. PyQt4, Qt çerçevesinin 4.x ve 5.x sürümlerini bağlamak için birleştirici kod sağlarken, PyQt5 yalnızca 5.x sürümleri için bir bağlama sağlar. Sonuç olarak PyQt5, eski sürümün kullanımdan kaldırılan modülleriyle geriye dönük olarak uyumlu değildir. Bu Qt GUI eğitiminde örneklerin gösterimi için PyQt5 kullanılacaktır. Bu iki versiyonun dışında

Riverbank Computing ayrıca Qt3D çerçevesi için python bağlamaları olan PyQt3D'yi de sağlar. 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++ ve Python Kaputun altındaki kod. Sonuç olarak, diğer python kütüphanelerine kıyasla kaynaktan derlemek ve kurmak karmaşık bir işlemdir. 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 Python, ilerlemeden önce pip'i indirip yüklemelisiniz. Bununla ilgili talimatları bu bağlantıda arayabilirsiniz: 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 Bilgisayarınızda yüklü olan python sürümü için ikili dosya.

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

Artık PyQt5'i bilgisayarınıza başarıyla yüklediğinize göre yazmaya hazırsınız Python GUI tasarım uygulamaları.

Bu PyQt5 eğitiminde ekranınızda boş bir pencere görüntüleyecek basit bir uygulamayla başlayalım.

Python'unuzu ateşleyin 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_())

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

Temel PyQt Concepts

Harika! İşe yarıyor. Çok fazla değil ama temelleri kavramak için yeterli. Şimdi bu PyQt eğitiminde programınızdaki her satırın ne yaptığını ayrıntılı olarak görelim.

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, QApplications'a herhangi bir argüman aktarmadınız. Dolayısıyla bunu aşağıdaki kodla da değiştirebilirsiniz 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 birbirine yuvalanabileceğini unutmamalısınız; en dıştaki widget'a (yani ebeveyni olmayan widget'a) Pencere adı verilir.

w.setWindowTitle("Guru99")

setWindowTitle() yöntemi, pencerenin başlığını ilettiğiniz dizeye ayarlayacak bir dizeyi argüman olarak iletmenize olanak tanır. PyQt5 örneğinde başlık çubuğu Guru99'u gösterecektir.

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 geçirir ve bu da yalnızca kullanıcı GUI'den uygulamayı kapattığında uygulamadan çıkar. Bu nedenle ctrl+c diğer python programlarında olduğu gibi uygulamadan çıkmaz. Qt uygulama üzerinde kontrole sahip olduğundan, python olayları uygulama içinde ayarlanmadığı sürece işlenmez. Ayrıca, exec yönteminin adında bir alt çizgi olduğunu unutmayın; bunun nedeni exec()'in zaten python'da bir anahtar sözcük olması ve alt çizginin adlandırma çakışmasını çözmesidir.

Boş pencerelerin ötesinde

Önceki bölümde Qt'da nasıl temel bir widget oluşturulacağını gördünüz. Artık kullanıcıların gerçekten etkileşim kurabileceği daha kapsamlı arayüzler oluşturmanın zamanı geldi. Tekrar, ateşini yak 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 herhangi bir şekilde 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 kutusuna herhangi bir pencere başlığı ayarlamadığımız için Python'ın kendisi varsayılan bir başlık sağladı.

Artık ç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 ve 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, bir QApplication örneği ve 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'deki sinyallere ve yuvalara bir örnektir. GUI tabanlı uygulamalarda işlevler, bir öğenin üzerine gelmek veya bir düğmeye tıklamak gibi kullanıcı tarafından gerçekleştirilen eylemlere göre yürütülür. Bu eylemlere denir olaylar. app.exec_() yönteminin kontrolü Qt'ye aktardığını hatırlayın. Etkinlik-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: piton 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.

Daha sonra, 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 şu anlama gelir: 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 üst düzey bir bakış açısına sahip olmak çok önemlidir. Bu bölümde PyQt5'in dahili olarak nasıl organize edildiğini görecek ve PyQt5 tarafından sağlanan farklı modüller, kitaplıklar 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.

  • Qt: Aşağıda belirtilen tüm sınıfları/modülleri tek bir modülde birleştirir. Uygulamanın kullandığı belleği önemli ölçüde artırır. Ancak çerçeveyi yalnızca bir modülü içe aktararak 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'lar: Pyqt5'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.
  • QtMultimedya düşü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()
  • QRadioButton: Bu, html'deki radyo düğmelerine benzer, seçilebilir düğmeli 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üBar: Pencerenin üst kısmında yatay bir menü çubuğu görüntüler. Bu çubuğa yalnızca QMenu sınıfının nesnelerini ekleyebilirsiniz. Bu QMenu nesneleri ayrıca dizeleri, QAction nesnelerini 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.
  • QTab: Bir pencerenin içeriğini, widget'ın ü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ı.
  • QScrollBar: Kullanıcının bir pencere içinde yukarı ve aşağı kaydırma yapmasına olanak tanıyan kaydırma çubukları oluşturmak için kullanılır. Hareketli bir kaydırıcı, bir kaydırıcı izi ve kaydırıcıyı yukarı veya aşağı kaydırmak için iki düğmeden oluşur.
    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.
  • QDock: Dock widget'ı iki özelliğe sahip bir alt penceredir:
  • Ana pencere içinde taşınabilir ve
  • Ana pencerenin dışına, ekrandaki başka bir konuma 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)
  • Col-span (varsayılan=0)

Daha iyi anlamak için her widget'ı aşağıda gösterildiği gibi 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

Themes

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 bu şekilde görünecek

Themes

Uygulamalarınızın temasını belirlemek için başka bir yararlı işlev de setPalette() yöntemidir. setPalette() kullanarak farklı widget'ların rengini değiştirmeye yönelik kod buradadır.

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ç.

Themes

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ğuna ve bunun çalışması için onu içe aktarmanız gerekeceğine dikkat edin. QPalette nesnesini oluşturduğunuzda, rengini değiştirmek istediğiniz widget'ın adını ve ayarlanmasını istediğiniz rengi iletmek için setColor() yöntemini kullanın.

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

Bu pencerenin rengini siyaha çevirecektir. 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.

ÖZET

  • PyQt, Python için bir bağlamadır C++ Kullanıcı arayüzü çerçevesi, Qt.
  • PyQt4 ve PyQt5, Riverbank Computing tarafından geliştirilen iki ana versiyondur.
  • PyQt çerçevesinin ana modülleri şunlardır:
    1. Qt
    2. QtCore
    3. QtWidget'lar
    4. QtGui
    5. QtSql
    6. QtNetwork
  • PyQt aşağıdakiler gibi çeşitli widget'ları destekler:
    1. Düğmeler
    2. Metin etiketleri
    3. Metin alanları
    4. Radyo düğmeleri ve onay kutuları
    5. Araç çubukları ve Menü çubukları
    6. Web seti
    7. Sekmeler
    8. Docks
  • PyQt'ta etkileşim şu şekilde uygulanır: sinyalleri ve yuvaları.
  • An olay GUI'de bir kullanıcı tarafından gerçekleştirilen bir eylemdir (bir düğmeye tıklamak gibi).
  • A işaret Üzerinde bir olay meydana geldiğinde ilgili widget tarafından tetiklenir.
  • A yarık sinyale bağlı olan ve sinyal yükseltildiğinde yürütülen bir fonksiyondur.
  • PyQt sağlam bir düzen motoruna sahiptir ve gelişmiş düzen tasarımını ve yönetimini destekler. Bunlar PyQt'ta sıklıkla kullanılan iki düzen şemasıdır:
    1. Box Düzen
    2. Izgara Düzeni
  • PyQt tasarımcısı, GUI uygulaması için özel temalar oluşturmanıza olanak tanır ve stil sayfaları için dahili desteğe sahiptir.
  • qtcreator Python Kullanıcı arayüzlerinin yanı sıra bağımsız uygulamalar oluşturmak için de kullanılabilir.