Serinin bu son bölümünde, kayıt uygulamamıza silme onayı, şirkete göre filtreleme ekleyeceğiz ve uygulamayı çalıştırılabilir bir .exe dosyasına nasıl çevireceğinizi göreceğiz.
Silme Onayı Sormak
Yanlışlıkla veri kaybını önlemek için, silme işleminden önce kullanıcıya bir onay penceresi göstermek iyi bir alışkanlıktır:
from PyQt5.QtWidgets import QMessageBox
def kayit_sil(self):
secili_satir = self.tbl1.currentRow()
if secili_satir == -1:
self.statusBar().showMessage("Lütfen silinecek kaydı seçin.", 3000)
return
silinecek_ad = self.tbl1.item(secili_satir, 0).text()
cevap = QMessageBox.question(
self, "Silme Onayı", "Bu kaydı silmek istediğinize emin misiniz?",
QMessageBox.Yes | QMessageBox.No,
)
if cevap == QMessageBox.Yes:
cursor.execute("DELETE FROM kayit WHERE ad = ?", (silinecek_ad,))
baglanti.commit()
self.statusBar().showMessage("Kayıt silindi.", 3000)
self.kayit_listele()
self.tbl1.currentRow(), tabloda o an seçili olan satırın numarasını verir; hiçbir şey seçili değilse-1döner — bu durumu kontrol etmek, kullanıcı bir şey seçmeden "Sil"e bastığında hata almanızı önler.QMessageBox.question(...), "Evet/Hayır" seçenekli bir onay penceresi açar ve kullanıcının seçimini döndürür.
Silme Butonunu Bağlamak
self.btn2.clicked.connect(self.kayit_sil)
Şirkete Göre Filtreleme
def sirkete_gore_listele(self):
secilen_sirket = self.cmb2.currentText()
self.tbl1.setRowCount(0)
cursor.execute("SELECT * FROM kayit WHERE sirket = ?", (secilen_sirket,))
for satir_no, satir in enumerate(cursor.fetchall()):
self.tbl1.insertRow(satir_no)
for kolon_no, deger in enumerate(satir):
self.tbl1.setItem(satir_no, kolon_no, QTableWidgetItem(str(deger)))
self.btn3.clicked.connect(self.sirkete_gore_listele)
Bu fonksiyon, önceki dersteki kayit_listele ile neredeyse aynıdır — tek fark, SQL sorgusuna WHERE sirket = ? koşulunun eklenmiş olmasıdır.
Uygulamayı .exe Dosyasına Çevirmek
Uygulamanızı Python kurulu olmayan bir bilgisayarda da çalıştırmak isterseniz, PyInstaller ile tek bir çalıştırılabilir dosyaya paketleyebilirsiniz:
pip install pyinstaller
pyinstaller --onefile --windowed main.py
--onefile, tüm bağımlılıkları tek bir.exedosyasında toplar.--windowed, uygulama çalışırken arkada bir konsol penceresi açılmasını engeller (masaüstü uygulamaları için uygundur).
Oluşan .exe dosyası dist/ klasöründe bulunur.
Sırada Ne Var?
Bu üç bölümlük masaüstü uygulaması serisini burada tamamlıyoruz. Sıradaki derste web scraping'e dönüp, BeautifulSoup ile bir web sitesinden güncel döviz kuru çekmeyi göreceğiz.