PYQT Denemeleri-3

Pardus-Linux.org | Wiki sitesinden

Git ve: kullan, ara

Giriş

Bu çalışmamızda herhangi bir yerden kopyaladığımız metni bir yerde dosya oluşturup içine yapıştıran bir program yazacağız.Yani yine basit bir program yazacağız.Python kodumuz şöyle olacak:

Kod:
ad = raw_input("Dosya adı giriniz:")
dosya = open(ad + ".txt", "w")
c = raw_input("İçinde neyazsın istersin:")
dosya.writelines(c)
dosya.close()

Arayüzün Oluşturulması

Öncelikle qt designer ile arayüzümüzü kolayca oluşturalım.Programı açınca açılan ilk pencerede "main window" u seçip "olustur" a tıklayalım.

Resim:resim-1.png

Soldaki parçacık kutusu bölümünden ""Buttons" bölümünden üç adet "push button" , "input widgets" bölümünden iki adet "line edit", "display widgets" bölümünden bir adet "label" parçalarını farenin sol tuşu ile tıklayıp ana pencere "main window" üzerine sürükleyerek bırakın ve resimde olduğu gibi yerleştirin.Üstteki "line edit" in boyutunu büyütmek için üstüne tıklayın.Tıkladığınızda üstünde mavi noktalar oluşur.Bu noktalara tıkladığınızda boyutlarını değiştirebilirsiniz.

Resim:Res-1.png

Daha sonra yerleştirdiniz parçacıklara çift tıklayarak isimlerini resimdeki gibi değiştirin.

Resim:Res-2.png

Şimdi sıra düğmelere görev atamakta."Düzenle > Sinyal slot düzenle" yi tıklayın yada "f4" e basın.Resimde görüldüğü gibi kapat tuşuna tıklayıp tuşu bırakmadan biraz sürükleyip boşluk üzerinde bırakın.Sakın başka bir parçacık üzerine bırakmayın.

Resim:Res-3.png

Yeni bir pencere açılacak.Açılan pencerede birinci bölümden "clicked()" seçip, aşağıdaki "Tüm sinyal ve slotları göster" tıklayıp, sağdaki bölümden "close()" seçip, tamam deyip kapatıyoruz.

Resim:resim-5.png

Aynı işlemi "kaydet" tuşu için de yapın."Yapıştır" tuşu için işlem biraz farklı.Bu tuşa bastığımızda kopyaladığımız şeyi büyük "line edit" içine yapıştırmak istiyoruz.Önce "Yapıştır" tuşuna tıklayıp bırakmadan sürüklüyoruz ve büyük "line edit" üzerinde bırakıyoruz.

Resim:Res-4.png

Yeni bir pencere açılacak.Açılan pencerede birinci bölümden "clicked()" seçip, sağdaki bölümden "paste()" seçip, tamam deyip kapatıyoruz.

Resim:Res-5.png

Arayüzle işimiz bitti.Yaptığımız bu formu bir yere yap.ui uzantısı ile kaydedin.İsim önemli değil ama son ek ".ui" olmalı.

Kodların Ayarlanması

yap.ui adıyla kaydedilmiş dosyanın olduğu dizine gidip konsolda şu komutu verin:

Kod:
pyuic4 yap.ui -o yap.py

Artık elimizde az önce yaptığımız formun kodları var.Ancak bu kodların henüz hazır olmadığını ve bir kaç düzenleme yapmamız gerektiğini önceki denemelerden biliyorsunuz.

yap.py dosyasını açıp en altına şu kodları yapıştırıyoruz:

Kod: Dosyanın sonuna bu kodları ekleyin
app = QtGui.QApplication(sys.argv)
window = QtGui.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(window)

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


Şimdi sıra düğmelere atayacağımız görevlerin kodlarını ayarlamakta.Yukarıda verdiğimiz python kodlarını düzenleyeceğiz.

Daha önceki denemelerimizde de söylediğimiz gibi "raw_input" yerine "line edit" kullanacağız ve bunları "Kaydet" tuşuna görev olarak atamamız gerektiği için bu kodları fonksiyon içinde yazacağız.Yani:

Kod:
def ekle(self):
	ad = ui.lineEdit_2.text()
	dosya = open(ad + ".txt", "w")
	dosya.writelines(ui.lineEdit.text())
	dosya.close()

Burada "ad = ui.lineEdit_2.text()" komutu ile küçük "line edit" e yazacağımız yazıyı dosyamıza isim olarak atıyoruz. "dosya = open(ad + ".txt", "w")" komutu ile yukarıdaki ismle ".txt" uzantılı bir dosya oluşturuyoruz.Bu dosya "yap.py dosyasının olduğu dizinde oluşur.Siz başka bir adres verebilirsiniz.Ayrıca isterseniz bu uzantıyı değiştirebilirsiniz.Mesela ".odt" gibi...

"dosya.writelines(ui.lineEdit.text())" komutu ile büyük "line edit" e yazacağımız yada yapıştıracağımız yazıyı dosyamıza kaydediyoruz.

"dosya.close()" komutu ile de açtığımız dosyamızı kapatıyoruz.

Bu komutları düğmelere atayabilmek için önce fonksiyon olarak tanımlamamız sonra da bu fonksiyonları sınıf içine almamız gerekiyor. Yani kodlarımızın son hali şöyle:

Kod:
class yap:
	def __init__(self, ui):
		self.ui = ui
	
	def ekle(self):
		ad = ui.lineEdit_2.text()
		dosya = open(ad + ".txt", "w")
		dosya.writelines(ui.lineEdit.text())
		dosya.close()

Şimdi sıra yazdığımız kodları düğmelere atamak da.Dosyadan aşağıda verdiğim bölümü bulun:

Kod:
self.retranslateUi(MainWindow)
QtCore.QObject.connect(self.pushButton_3,QtCore.SIGNAL("clicked()"),MainWindow.close)        
QtCore.QObject.connect(self.pushButton_2,QtCore.SIGNAL("clicked()"),MainWindow.close)        
QtCore.QObject.connect(self.pushButton,QtCore.SIGNAL("clicked()"),self.lineEdit.paste)        
QtCore.QMetaObject.connectSlotsByName(MainWindow)

Biz "def retranslateUi(self, MainWindow):" yardımıyla biliyoruz ki:

Kod:
ui.pushButton_2  = (Kaydet tuşu)

Bu tuşun içinde geçtiği komutun en son bölümünü

Kod:
MainWindow.close

silip (ui.pushButton_3 = (kapat) a dokunmuyoruz o zaten kapatmak için kullanılacak)

Kod:
self.yap.ekle  (yap sınıfımız, ekle bu sınıf içindeki fonksiyonumuz: Yukarıda yazdığımız kodlar) 

kodlarımızı yazıyoruz.

Son olarak da

Kod:
self.retranslateUi(MainWindow)

yazısını hemen altına

Kod:
self.yap = yap(self)

yazıyoruz.

Yani son hali şöyle:

Kod:
        
self.retranslateUi(MainWindow)	
self.yap = yap(self)        
QtCore.QObject.connect(self.pushButton_3,QtCore.SIGNAL("clicked()"),MainWindow.close)        
QtCore.QObject.connect(self.pushButton_2,QtCore.SIGNAL("clicked()"),self.yap.ekle)        
QtCore.QObject.connect(self.pushButton,QtCore.SIGNAL("clicked()"),self.lineEdit.paste)        
QtCore.QMetaObject.connectSlotsByName(MainWindow)

Son olarak dosyanın en üstüne şu kodları ekleyin:

Kod:
import random, sys

Artık programımız çalışır durumda.Programı çalıştırmak için oyun.py dosyasının olduğu dizinde konsolda şu komutu verin:

Kod:
python yap.py

Resim:Res-6.png Resim:Res-7.png Resim:Res-8.png

Karşılaştığınız sorunlar için forumda açtığım konuya yazabilirsiniz.

Adres: http://forum.pardus-linux.org/viewtopic.php?p=86032#86032