Pencereler Arası Haberleşme w/ PyQt5


Merhabalar bu yazımda sizler için PyQt5 ile bir deneme yapmak istedim. Bu denemede iki pencere arasında veri gönderimi yapmaya çalışacağız. Hadi hiç vakit kaybetmeden çalışmalara başlayalım.

Şimdi ilk başta PyQt5 hakkında bilginiz olduğunu varsayarak ilerleyeceğim için bilmeyenleri şu youtube playlist'ine davet ediyorum. Bu eğitimin içinde de bulunan bir olayı yapıyor olacağız bizde. 

Bildiğiniz üzere PyQt5 ile masaüstü uygulamaları tasarlayabiliyoruz. Gayet başarılı bir şekilde işlemlerimizi halledebiliyoruz ama benim aklıma çok önemli bir olay takılmıştı. İki tane ayrı sayfa açmak durumunda kalsam ne yapacaktım? Tabi bunu yapabilmek düşündüğüm kadar zor değilmiş. Sizlere de hemen aşağıda göstereyim.

İlk arayüzü oluşturalım


Bu görüntü ile hem arayüzün QtDesigner üzerinde nasıl durduğunu, hemde preview modda nasıl durduğunu görebilirsiniz. Bir tane label ve bir tane de buton ekleyerek bitirdim işimi.

İkinci arayüzü oluşturalım


Burada ikinci arayüzü görmektesiniz. Bir tane yazı yazabileceğimiz QLineEdit ve bir tane de butonumuz bulunmaktadır. Burada yapacağımız işlem ile ilk pencerede bulunan label'ın değerini değiştirebileceğiz. Arayüz kısmımız bu kadardır. Şimdi kod kısmına geçelim ve arkaplan işlerine göz gezdirelim.

Kod

#İlk başta kütüphanelerimizi çağırıyoruz.
from PyQt5 import QtWidgets, uic
from PyQt5.QtCore import pyqtSignal #Bu veriyi sayfadan sayfaya aktarmak için lazım olacak.
import sys

#Bu ilk sayfamızın sınıfı, buradan başlayalım.
class Ui(QtWidgets.QMainWindow):
def __init__(self):
super(Ui, self).__init__()
uic.loadUi('page1.ui', self) #Sayfamızı yüklüyoruz.
self.dialog = secondPage() #İkinci sayfamızın sınıfı, bunu çağırabilmek
                                  #için kullanacağız.
self.changeLabelButton.clicked.connect(self.openSecondPage) #Tıklayınca ikinci
                                                                   #sayfa yönlendirecek.
self.dialog.mySignal.connect(self.changeData) #İkinci sayfamızdaki veri değiştiğinde
#ve butona tıklanıldığında burası çalışacak.
def openSecondPage(self): #ikinci sayfayi acabilmek icin bunu kullaniyoruz.
self.dialog.show()
def changeData(self, data): #Veri değiştiğinde label adlı yazı bölgemize
self.label.setText(data) #değerimizi atıyoruz.

class secondPage(QtWidgets.QMainWindow): #ikinci sayfanin sinifi burada bulunmaktadir.
mySignal = pyqtSignal(str)
def __init__(self):
super(secondPage, self).__init__()
uic.loadUi('page2.ui', self) #İkinci sayfamızı buradan açıyoruz.
self.okButton.clicked.connect(self.changeName) #Butona tıkladığımızda
                                                      #fonksiyon çalışıyor.
def changeName(self):
data = self.dataEdit.text() #Verimizi ilk başta alıyoruz.
print("new name: " + data) #Test için yazdırdım ben konsolda.
self.mySignal.emit(data) #Şimdi verimizle beraber sinyal gönderiyoruz alıcıya.
# 13. satırda alıcımız bulunmakta.

#Bu kısım ilk başta çalışmaktadır.
app = QtWidgets.QApplication(sys.argv)
window = Ui()
window.show()
app.exec_()

Video

Örnek çalışma videosunu da inceleyebilirsiniz.




Github Linki

Projenin tamamına bu linkten ulaşabilirsiniz: https://github.com/Mastechnology/send-data-window2window-with-pyqt5.git

Yorumlar

Bu blogdaki popüler yayınlar

Python ile Turtle Kütüphanesiyle Çizim Denemesi 2

Girdimize en yakın palindrom değeri bulan program (Python3 ile)

Python ile Yazıyı Piramit Gibi Çizdirme