Merhaba. Giriş sayfası, ana sayfa ve bir yan sayfadan oluşan üç sayfalı bir uygulama geliştirmeye çalışıyorum. Bu üçü için ayrı sınıflar mı oluşturmalıyım yoksa tek bir sınıftan mı türetmeliyim?
Mevcut olarak yaptığım, üç sınıftan oluşuyor ancak daha şimdiden giriş sayfasından ana sayfaya geçiş işleminde sorun yaşıyorum. Önerileriniz nelerdir?
Teşekkürler.
Sayfadan kasıt ?
Sınıftan kasıt ?
Geçişten kasıt nedir ve nasıl geçiş yapıyorsunuz ?
İnsanların size öneride bulunabilmeleri için daha detaylı yazmalısınız. SS'lerle süsleyin konunuzu, hatta gerekirse paintten bir taslak çiziniz, kodları gösteriniz ki insanlar daha kolay yardımcı olabilsin.
Bir masaüstü uygulaması düşünün, önce giriş penceresi(sayfası) olur; kullanıcı adı ve parola doğru ise ana pencereye geçrsiniz ve giriş penceresi kapanır. Ana penceredeki herhangi bir işlevsel düğme de sizi başka bir pencereye aktarabilir ancak ana pencere sabit kalır vb.
NTP olarak yapmaya çalıştığımdan her pencere için farklı sınıflar(python class) oluşturdum ve gerekli yönergelerle pencereler arasında geçiş yapmak istiyorum.
Ana pencere QMainWindow ancak giriş penceresi dahil diğer olası pencereler QDialog şeklinde.
Kısacası isteğim, bir sınıftan örneklediğim pencereden(nesne) bir diğer pencereye geçişte,
self.diger_pencere.show()
gibi bir kullanımdan başka bir yöntemin(varsa) önerilmesine yönelikti. Çünkü bu işe yaramıyor, uygulama kırılıyor.
class GirisSayfasi(QtWidgets.QDialog):
def __init__(self):
super(GirisSayfasi, self).__init__()
self.uygulama = QApplication(sys.argv)
self.anasayfa = Ui_AnaPencere()
self.durum = False
self.arayuz_giris = Ui_GirisSayfasi()
self.arayuz_giris.setupUi(self)
self.arayuz_giris.dgmGirisYap.clicked.connect(self.gir)
self.arayuz_giris.dgmHesapAc.clicked.connect(self.hesapAc)
def uygulamaAnaSayfa(self):
self.uygulama = QApplication(sys.argv)
self.anasayfa = AnaSayfa()
self.anasayfa.show()
sys.exit(self.uygulama.exec_())
def gir(self):
kullanici_adi = self.arayuz_giris.lneKullaniciAdi.text()
parola = self.arayuz_giris.lneParola.text()
if kullanici_adi == "***" and parola == "***":
self.arayuz_giris.lblBilgilendirme.setText("Giriş başarılı.")
self.uygulamaAnaSayfa()
sys.exit(self.uygulama.exec_())
else:
self.arayuz_giris.lblBilgilendirme.setText("Hatalı bir giriş yapıldı!")
def hesapAc(self):
kullanici_adi = self.arayuz_giris.lneKullaniciAdi.text()
parola = self.arayuz_giris.lneParola.text()
if kullanici_adi and parola != 0:
self.arayuz_giris.lblBilgilendirme.setText("Hesabınız oluşturuldu. Şimdi giriş yapabilirsiniz.")
else:
self.arayuz_giris.lblBilgilendirme.setText("Öncelikle hesap bilgilerinizi giriniz!")
class AnaSayfa(QtWidgets.QMainWindow):
def __init__(self):
super(AnaSayfa, self).__init__()
self.arayuz_ana = Ui_AnaPencere()
self.arayuz_ana.setupUi(self)
self.baglanti = sqlite3.connect("veritabani.db")
self.imlec = self.baglanti.cursor()
self.tablo_sorgusu = ("CREATE TABLE IF NOT EXISTS Bilgiler(Numara INTEGER NOT NULL PRIMARY "
"KEY AUTOINCREMENT, Uygulama TEXT NOT NULL, Kullanici TEXT NOT NULL, "
"Parola TEXT NOT NULL, EkBilgi TEXT)")
self.imlec.execute(self.tablo_sorgusu)
self.baglanti.commit()
.
.
.
Devamı da var ancak gereksiz olacak.
Anlatabildiğimi umarım.
class içerisinde böyle bir kullanımı ilk kez görüyorum açıkçası. Mümkünse kodlarınızın tamamını paylaşabilir misiniz ? Bizzat kendim deneyip test etmek istiyorum. Denedikten sonra tekrar dönüş yaparım size.
Kesinlikle, başka bir yol bulamadığım için o biçimde yazmayı denedim.
En aşağıdaki kodları henüz düzene koyamadığım için oradaki fonksiyonlar atıl durumdalar.
Kodlar:
import sys
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import *
from payo_giris import Ui_GirisSayfasi
from payo_anasayfa import Ui_AnaPencere
from payo_tablo import Ui_BilgilerTablosu
import sqlite3
class GirisSayfasi(QtWidgets.QDialog):
def __init__(self):
super(GirisSayfasi, self).__init__()
self.uygulama = QApplication(sys.argv)
self.anasayfa = Ui_AnaPencere()
self.arayuz_giris = Ui_GirisSayfasi()
self.arayuz_giris.setupUi(self)
self.arayuz_giris.dgmGirisYap.clicked.connect(self.gir)
self.arayuz_giris.dgmHesapAc.clicked.connect(self.hesapAc)
def uygulamaAnaSayfa(self):
self.uygulama = QApplication(sys.argv)
self.anasayfa = AnaSayfa()
self.anasayfa.show()
sys.exit(self.uygulama.exec_())
def gir(self):
kullanici_adi = self.arayuz_giris.lneKullaniciAdi.text()
parola = self.arayuz_giris.lneParola.text()
if kullanici_adi == "***" and parola == "***":
self.arayuz_giris.lblBilgilendirme.setText("Giriş başarılı.")
self.uygulamaAnaSayfa()
sys.exit(self.uygulama.exec_())
else:
self.arayuz_giris.lblBilgilendirme.setText("Hatalı bir giriş yapıldı!")
def hesapAc(self):
kullanici_adi = self.arayuz_giris.lneKullaniciAdi.text()
parola = self.arayuz_giris.lneParola.text()
if kullanici_adi and parola != 0:
self.arayuz_giris.lblBilgilendirme.setText("Hesabınız oluşturuldu. Şimdi giriş yapabilirsiniz.")
else:
self.arayuz_giris.lblBilgilendirme.setText("Öncelikle hesap bilgilerinizi giriniz!")
class AnaSayfa(QtWidgets.QMainWindow):
def __init__(self):
super(AnaSayfa, self).__init__()
self.arayuz_ana = Ui_AnaPencere()
self.arayuz_ana.setupUi(self)
self.baglanti = sqlite3.connect("veritabani.db")
self.imlec = self.baglanti.cursor()
self.tablo_sorgusu = ("CREATE TABLE IF NOT EXISTS Bilgiler(Numara INTEGER NOT NULL PRIMARY "
"KEY AUTOINCREMENT, Uygulama TEXT NOT NULL, Kullanici TEXT NOT NULL, "
"Parola TEXT NOT NULL, EkBilgi TEXT)")
self.imlec.execute(self.tablo_sorgusu)
self.baglanti.commit()
self.arayuz_ana.dgmSakla.clicked.connect(self.sakla)
self.arayuz_ana.dgmSil.clicked.connect(self.sil)
self.arayuz_ana.anaSayfaTablosu.itemSelectionChanged.connect(self.doldur)
self.arayuz_ana.dgmGuncelle.clicked.connect(self.guncelle)
self.arayuz_ana.dgmAra.clicked.connect(self.ara)
self.arayuz_ana.dgmTemizle.clicked.connect(self.temizle)
self.arayuz_ana.dgmTumu.clicked.connect(self.tumunuAc)
self.arayuz_ana.dgmCik.clicked.connect(self.cik)
def listeyeYansit(self):
self.arayuz_ana.anaSayfaTablosu.clear()
self.arayuz_ana.anaSayfaTablosu.setHorizontalHeaderLabels(("Nu", "Uygulama", "Kullanıcı", "Parola", "Ek Bilgi"))
self.arayuz_ana.anaSayfaTablosu.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
self.imlec.execute("SELECT * FROM Bilgiler")
for satir_indisi, satir_verisi in enumerate(self.imlec):
for sutun_indisi, sutun_verisi in enumerate(satir_verisi):
self.arayuz_ana.anaSayfaTablosu.setItem(satir_indisi, sutun_indisi, QTableWidgetItem(str(sutun_verisi)))
self.arayuz_ana.anaSayfaTablosu.setEditTriggers(QtWidgets.QTableWidget.NoEditTriggers)
self.arayuz_ana.lneUygulama.clear()
self.arayuz_ana.lneKullanici.clear()
self.arayuz_ana.lneAcarga.clear()
self.arayuz_ana.lneEkBilgi.clear()
def sakla(self):
uygulama = self.arayuz_ana.lneUygulama.text()
kullanici = self.arayuz_ana.lneKullanici.text()
acarga = self.arayuz_ana.lneAcarga.text()
ek_bilgi = self.arayuz_ana.lneEkBilgi.text()
if uygulama and kullanici and acarga != 0:
self.imlec.execute("INSERT INTO Bilgiler(Uygulama, Kullanici, Parola, EkBilgi) VALUES"
"(?, ?, ?, ?)", (uygulama, kullanici, acarga, ek_bilgi))
self.baglanti.commit()
self.arayuz_ana.durumCubugu.showMessage("Bilgileriniz saklandı.", 7000)
else:
self.arayuz_ana.durumCubugu.showMessage("Gerekli bilgiler girilmeden bilgi saklanamaz.", 7000)
def doldur(self):
secili_satir = self.arayuz_ana.anaSayfaTablosu.selectedItems()
if len(secili_satir) != 0:
self.arayuz_ana.lneUygulama.setText(secili_satir[1].text())
self.arayuz_ana.lneKullanici.setText(secili_satir[2].text())
self.arayuz_ana.lneAcarga.setText(secili_satir[3].text())
self.arayuz_ana.lneEkBilgi.setText(secili_satir[4].text())
else:
self.arayuz_ana.lneUygulama.clear()
self.arayuz_ana.lneKullanici.clear()
self.arayuz_ana.lneAcarga.clear()
self.arayuz_ana.lneEkBilgi.clear()
self.arayuz_ana.durumCubugu.showMessage("Seçilen satır boştur.", 3000)
def guncelle(self):
secili_satir = self.arayuz_ana.anaSayfaTablosu.selectedItems()
if len(secili_satir) != 0:
yanit = QMessageBox.question(self, "Güncelleme", "Kayıt güncellensin mi?", QMessageBox.Yes | QMessageBox.No)
if yanit == QMessageBox.Yes:
try:
secili_urun = self.arayuz_ana.anaSayfaTablosu.selectedItems()
nu = int(secili_urun[0].text())
uygulama = self.arayuz_ana.lneUygulama.text()
kullanici = self.arayuz_ana.lneKullanici.text()
acarga = self.arayuz_ana.lneAcarga.text()
ek_bilgi = self.arayuz_ana.lneEkBilgi.text()
self.imlec.execute("UPDATE Bilgiler SET Uygulama=?, Kullanici=?, Parola=?, EkBilgi=? "
"WHERE Numara=?", (uygulama, kullanici, acarga, ek_bilgi, nu))
self.baglanti.commit()
self.listeyeYansit()
self.arayuz_ana.durumCubugu.showMessage("Güncelleme işlemi başarıyla gerçekleşti.", 7000)
except Exception as hata:
self.arayuz_ana.durumCubugu.showMessage(str(hata) + "adlı bir hata ile karşılaşıldı.", 5000)
else:
self.arayuz_ana.durumCubugu.showMessage("Güncelleme işlemi iptal edildi.", 7000)
else:
self.arayuz_ana.durumCubugu.showMessage("Güncellemek için önce dolu bir satır seçmelisiniz.", 7000)
def sil(self):
yanit = QMessageBox.question(self, "Silme", "Silmek mi istiyorunuz?", QMessageBox.Yes | QMessageBox.No)
if yanit == QMessageBox.Yes:
secili_urun = self.arayuz_ana.anaSayfaTablosu.selectedItems()
silinecek_urun = secili_urun[0].text()
try:
self.imlec.execute("DELETE FROM Bilgiler WHERE Numara='%s'" % silinecek_urun)
self.baglanti.commit()
self.listeyeYansit()
self.arayuz_ana.durumCubugu.showMessage("Kayıt silme işlemi başarıyla gerçekleşti.", 7000)
except Exception as hata:
self.arayuz_ana.durumCubugu.showMessage(str(hata) + "adlı bir hata ile karşılaşıldı.", 5000)
else:
self.arayuz_ana.durumCubugu.showMessage("Silme işlemi iptal edildi.", 7000)
def ara(self):
pass
def temizle(self):
self.arayuz_ana.lneAra.clear()
self.listeyeYansit()
def tumunuAc(self):
pass
def cik(self):
pass
class TabloSayfasi(QtWidgets.QDialog):
def __init__(self):
super(TabloSayfasi, self).__init__()
self.arayuz_tablo = Ui_BilgilerTablosu()
self.arayuz_tablo.setupUi(self)
self.tablo_sayfasi = QApplication(sys.argv)
self.kayitlar_sayfasi = QDialog()
def kayitSayisiVer(self):
self.imlec.execute("SELECT COUNT(*) FROM Bilgiler")
kayit_sayisi = self.imlec.fetchone()
self.arayuz_tablo.lblKayitGosterim.setText(str(kayit_sayisi[0]))
def listeyeYansit(self):
self.arayuz_tablo.tblKayitlar.clear()
self.arayuz_tablo.tblKayitlar.setHorizontalHeaderLabels(("Nu", "Uygulama", "Kullanıcı", "Parola", "Ek Bilgi"))
self.arayuz_tablo.tblKayitlar.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
self.imlec.execute("SELECT * FROM Bilgiler")
for satir_indisi, satir_verisi in enumerate(self.imlec):
for sutun_indisi, sutun_verisi in enumerate(satir_verisi):
self.arayuz_tablo.tblKayitlar.setItem(satir_indisi, sutun_indisi, QTableWidgetItem(str(sutun_verisi)))
self.arayuz_tablo.tblKayitlar.setEditTriggers(QtWidgets.QTableWidget.NoEditTriggers)
self.kayitSayisiVer()
def kapat(self):
yanit = QMessageBox.question(self, "Kapat", "Tablo kapatılsın mı?", QMessageBox.Yes | QMessageBox.No)
if yanit == QMessageBox.Yes:
self.baglanti.close()
sys.exit(self.tablo_sayfasi.exec_())
else:
self.kayitlar_sayfasi.show()
def uygulamaAnaSayfa():
uyg = QApplication(sys.argv)
pencere = AnaSayfa()
pencere.show()
pencere.listeyeYansit()
sys.exit(uyg.exec_())
# uygulamaAnaSayfa()
def uygulamaTabloSayfasi():
uyg = QApplication(sys.argv)
pencere = TabloSayfasi()
pencere.show()
sys.exit(uyg.exec_())
# uygulamaTabloSayfasi()
def uygulamaGirisSayfasi():
uyg = QApplication(sys.argv)
giris = GirisSayfasi()
giris.show()
sys.exit(uyg.exec_())
# uygulamaGirisSayfasi()