PYQT Denemeleri-3
Pardus-Linux.org | Wiki sitesinden
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.
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.
Daha sonra yerleştirdiniz parçacıklara çift tıklayarak isimlerini resimdeki gibi değiştirin.
Ş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.
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.
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.
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.
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 |
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
Bu yazı PYQT Denemeleri bölümünün bir parçasıdır.
| 1. PYQT Denemeleri-1 | 2. PYQT Denemeleri-2 |
| 3. PYQT Denemeleri-3 | 4. PYQT Denemeleri-4 |
| 5. PYQT Denemeleri-5 | 6. PYQT Denemeleri-6 |
| 7. PYQT Denemeleri-7 | 8. PYQT Denemeleri-8 |
| 9. PYQT Denemeleri-9 | 10. PYQT Denemeleri-10 |










