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
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
Yorum Gönder