Nesnenin metodlarına ulaşamıyorum

Merhaba netten izlediğim video dersindeki uygulamayla paralel kendi projemi geliştiriyorum fakat aynı kütüphaneleri yüklememize rağmen benim projem de

ui.dat_DogumTarihi.

nesnesinin selectedDate fonksiyonu .çıkmıyor. Nesne videodaki projede QCalenderWidget ben ise QDateEdit kullandım. Bende DogumTarıhı nesnesinin selectedDate fonksiyonu ben farklı bir widget kullandığım için sanırım çıkmıyor. QdateEdit kullandıgım için hangi fonksiyonu kullanmam gerekecek.

Farklı bir kütüphane mi yüklemem gerekiyor. Bu Kodun öncesindeki tüm nesnelerin fonksiyonlarına ulaştım fakat burdaki sorunu çözemedim. Yardımlarınız için teşekkür ederim.

# --------------------KUTUPHANELER--------------------
# ----------------------------------------------------

import sys
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import *
from UyeKayitFormuUI import *
import datetime


# --------------------UYGULAMA OLUŞTUR----------------
# ----------------------------------------------------

uygulama = QApplication(sys.argv)
penUyeKayitFormu = QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(penUyeKayitFormu)
penUyeKayitFormu.show()

# ------------------VERITABANI OLUŞTUR----------------
# ----------------------------------------------------

import sqlite3

global curs
global conn
conn = sqlite3.connect('Dernek_YS.db')
curs = conn.cursor()
srgCreateTblUye = ('CREATE TABLE IF NOT EXISTS uye(                                                                    \
                   Id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,                                                      \
                   Durum TEXT NOT NULL UNIQUE,                                                                         \
                   UyeNo TEXT NOT NULL UNIQUE,                                                                         \
                   AdiSoyadi TEXT NOT NULL,                                                                            \
                   TcNo TEXT NOT NULL,                                                                                 \
                   Tabiyeti TEXT NOT NULL,                                                                             \
                   DogumTarihi TEXT NOT NULL,                                                                          \
                   DogumYeri TEXT NOT NULL,                                                                            \
                   AnaAdi TEXT NOT NULL,                                                                               \
                   BabaAdi TEXT NOT NULL,                                                                              \
                   Meslegi TEXT NOT NULL,                                                                              \
                   OgrenimDurumu TEXT NOT NULL,                                                                        \
                   SosyalGuvencesi TEXT NOT NULL,                                                                      \
                   KabulTarihi TEXT NOT NULL,                                                                          \
                   KabulKararNo TEXT NOT NULL,                                                                         \
                   IptalTarihi TEXT,                                                                                   \
                   IptalKararNo TEXT,                                                                                  \
                   IptalNedeni TEXT,                                                                                   \
                   CepNo_1 TEXT NOT NULL,                                                                              \
                   CepNo_2 TEXT,                                                                                       \
                   IrtibatNo TEXT,                                                                                     \
                   Ilce TEXT NOT NULL,                                                                                 \
                   Sehir TEXT NOT NULL,                                                                                \
                   E_Mail TEXT,                                                                                        \
                   Aciklama TEXT,                                                                                      \
                   Adress TEXT NOT NULL,                                                                               \
                   AkuluAraba TEXT ,                                                                                   \
                   TekerlekliSandalye TEXT,                                                                            \
                   KanadyenBaston TEXT,                                                                                \
                   Yurutec TEXT,                                                                                       \
                   Protez TEXT,                                                                                        \
                   Ortez TEXT,                                                                                         \
                   KanGrubu TEXT NOT NULL,                                                                             \
                   EngelNedeni TEXT,                                                                                   \
                   EngelYuzdesi TEXT,                                                                                  \
                   IlgilendigiSporlar TEXT)')


curs.execute(srgCreateTblUye)
conn.commit() # Veritabaniyla Baglantiyi Kuruyoruz.


# -----------------------KAYDET-----------------------
# ----------------------------------------------------

def KAYDET():
    _cob_Durum = ui.cob_Durum.currentText() # current.item().text() Listelerdeki itemlara ulasma kodu.
    _led_UyeNo = ui.led_UyeNo.text()
    _led_AdiSoyadi = ui.led_AdiSoyadi.text()
    _led_TcNo = ui.led_TcNo.text()
    _led_Tabiyeti = ui.led_Tabiyeti.text()
    _dat_DogumTarihi = ui.dat_DogumTarihi.selec
    _led_DogumYeri = ui.led_DogumYeri.text()
    _led_AnaAdi = ui.led_AnaAdi.text()
    _led_BabaAdi = ui.led_BabaAdi.text()
    _led_Meslegi = ui.led_Meslegi.text()
    _cob_OgrenimDurumu = ui.cob_OgrenimDurumu.currentText()
    _cob_SosyalGuvencesi = ui.cob_SosyalGuvencesi.currentText()
    _dat_KabulTarihi = ui.dat_KabulTarihi.text()
    _led_KabulKararNo = ui.led_KabulKararNo.text()
    _dat_IptalTarihi = ui.dat_IptalTarihi.text()
    _led_IptalKararNo = ui.led_IptalKararNo.text()
    _led_IptalNedeni = ui.led_IptalNedeni.text()
    _led_CepNo1 = ui.led_CepNo1.text()
    _led_CepNo2 = ui.led_CepNo1.text()
    _led_IrtibatNo = ui.led_IrtibatNo.text()
    _led_Ilce = ui.led_Ilce.text()
    _led_Sehir = ui.led_Sehir.text()
    _led_EMail = ui.led_EMail.text()
    _led_Aciklama = ui.led_Aciklama.text()
    _led_Adres = ui.led_Adres.text()
    _chb_AkuluAraba = ui.chb_AkuluAraba.text()
    _chb_TekerlekliSandalye = ui.chb_TekerlekliSandalye.text()
    _chb_KanadyenBaston = ui.chb_KanadyenBaston.text()
    _chb_Yurutec = ui.chb_Yurutec.text()
    _chb_Protez = ui.chb_Protez.text()
    _chb_Ortez = ui.chb_Ortez.text()
    _cob_KanGrubu = ui.cob_KanGrubu.currentText()
    _led_EngelNedeni = ui.led_EngelNedeni.text()
    _led_EngelYuzdesi = ui.led_EngelYuzdesi.text()
    _led_IlgilendigiSporlar = ui.led_IlgilendigiSporlar.text()
    ui.dat_KabulTarihi.s


sys.exit(uygulama.exec_())

Merhaba;

Bunun sebebi şu;

QDateEdit , setSelectedDate metoduna sahip değil. Resmi dökümantasyondan araçların sahip oldukları metodları,sinyalleri,slotları ve daha fazlasını öğrenebilirsiniz.

Çözüm olarak, QDateTimeEdit sınıfının setCalendar metodu mevcut. Bu metoda parametre olarak bir QCalendarWidget nesnesi verebilirsiniz. Daha sonra istediğiniz işlemleri (setSelectedDate) o QCalendarWidget nesnesi üzerinden yapabilirsiniz. QDateTimeEdit nesnesi ile pek işiniz olmaz.

@ggns7
İki şekilde de yazdım. Amacıma QDateEdit kullanmak uyuyor saat göstermek istemiyorum normalde.
Bu kodu Arayüzde Tarih alanını QDateTimeEdit Widgetıyla oluşturduğum için yazdım

_dte_DogumTarihi = ui.dte_DogumTarihi.setCalendar(QCalendarWidget.selectedDate().toString(QtCore.Qt.ISODate))

Bu kodu da Arayüzde Tarih alanını QDateEdit Widgetıyla oluşturduğum için yazdım

_dat_DogumTarihi = ui.dat_DogumTarihi.setCalendar(QCalendarWidget.selectedDate().toString(QtCore.Qt.ISODate))

Veritabanına kaydederken bakalım ikiside çalışacak mı.

QDateEdit, QDateTimeEdit sınıfını miras alıyor, belki setCalendar metodu kullanılabilir; QDateEdit için.

Öneriniz için teşekkürler onu da deneyeceğim.

Merhaba QT Formundan tarih girmek ve bu işleminde SQLite VT ye kaydolmasını sağlamak ne zormuş. Altı üstü Masaüstü uygulamasındaki formdan girilmiş tarihi alacağım ama bana illallah dedirtti. Pythondan soğudum bunun yüzünden. Resmi dökümantasyonlarına bir girdim hala çıkamadım o kadar çok metod fonksiyon var ki hangi birini deneyeceğimi şaşırdım. Denediklerimle de VT kaydı gerçekleşmedi. Yabancı sitelerde de izlediğim videolar genelde QT arayüzü üzerinden değil kod yazarak oluşturulan ara yüzlerdeki çözümleri içeriyor. QDateEdit le ilgili calender widgetdaki selectedDate fonksiyonunun işlevini görecek bir metod bulamadım.


alttaki resimdeki calender widget ile üstteki resimdeki selectedDate fonsiyonundan VT kaydı yapılıyor. Ama ui.dat_DogumTarihi kodunda başvurulan QDate Objesinin hangi metodunun SelectedDate metodu ile aynı işi yapabileceğini bulamadım.
Denememi önereceğiniz başka bir fonksiyon olabilir mi acaba

Tekrardan merhaba;

Bunda sizin de payınız var.

Şevkiniz kırılmasın, pozitif düşünün. Her zaman hatayı önce kendinizde arayın.

Bence bu harika bir şey :smiley:

Bulamamanız çok normal. Çünkü QDateEdit, QDateTimeEdit’i miras aldığı için aynı metodları bir daha yazmak ile uğraşmamışlar. QDateEdit sayfasında sadece QDateEdit’in QDateTimeEdit’ten farklı metodları var, diğerleri aynı. Dolayısıyla QDateTimeEdit’i incelemelisiniz.

Sayfasına gittiğinizde göze çarpan ilk metodlardan bir tanesi calendarWidget().

"İsmi kulağa hoş geliyor, sanırım aradığım şey bu. Çünkü ben QCalendarWidget ile ilgileniyorum ve metodun ismi de calendarWidget. Demek ki QDateEdit Popup modu aktif edildiğinde bir QCalendarWidget nesnesi oluşturuyor kendi içerisinde, güzellll.

Pekala, o halde şöyle yapacağım; QDateEdit.calendarWidget().selectedDate() Bu, bana seçilen tarihi vermeli, çünkü her şey çok mantıklı duruyor, deneyeyim;

import sys
from PySide2.QtWidgets import*
from PySide2.QtCore import*
from PySide2.QtGui import*



class Pencere(QMainWindow):
	def __init__(self):
		super(Pencere, self).__init__()
		self.resize(600,400)

		widget = QWidget()

		dateEdit = QDateEdit()
		dateEdit.setCalendarPopup(True)

		dateEdit.userDateChanged.connect(lambda: print(f"Secilen tarih: \
			{dateEdit.calendarWidget().selectedDate()}"))

		layout = QVBoxLayout(widget)
		layout.addWidget(dateEdit)

		self.setCentralWidget(widget)
		self.setLayout(layout)


if __name__ == "__main__":
	app = QApplication(sys.argv)
	window = Pencere()
	window.show()
	sys.exit(app.exec_())

Harika, işte istediğimi elde ettim."

@ggns7 Merhaba Son yaptığım denemelerden birinde bayağı yaklaşmışım SetDate ( Ha dateEdit ha SetDate benim için farketmez :slight_smile:)) ile CalenderWıdgetın selectDate metodunu çağırmışım ama burda toString methodu kullanılamadığı için devamı gelmemiş.

Yukarıda yazdıklarım probleminizi çözüyor olmalı. Son satırda kullanıcının girdiği tarihi seçmiyorsunuz. Farkındasınız değil mi?

Yukarda yazdığım onu işaret ediyordu onun devamını toString metodu ile (Calısan Calender Wıdget kodundaki gibi kopyalamaya calıştığım) getirmeye çalışmıştım. Gelmeyince farklı çözümlere yelken açtım.

.date() muhtemelen.

Bence ogrenme methodundan sogutmali. Programciliga holistik degil, analitik yaklasmak lazim.

Mesela SQLite INSERT’te string-literal aliyor (asagidaki lang_insert’e bak). sqlite3 bunlari Python string (str) turunde yolluyor. Vidyoda gecen string’i QDate.toString() ile olusturuyoruz. QDate de QCalendarWidget.selectedDate() ile geliyor.

Turler ve veri ve kod akisi uzerinden anlatan dersler bulmaya calisabilirsin. Turkce kaynak sahsen bilmiyorum malesef :confused:

1 Beğeni

@ggns7 Başınızı çok ağrıttım kusuruma bakmayın.

Ben bu doğum tarihi nesnesine
nesnenin üzerinden yani nesnenin metod yada fonksiyonları üzerinden ulaşmaya çalışıyorum. Nesnemin ekran görüntüsünden de anlayacağınız üzere nesnemin dateEdit fonksiyonu yok. Yazdığınız fonksiyonu koduma nasıl adapte edebilirim zaten o benim için ayrı bir muamma.

ui.dat_DogumTarihi.(noktaya bastığımda çağrılan fonksiyonlarda dateEdit yok)

Lütfen bunu aşağıdaki yoruma çevirdiğim denemelerimden biri üzerinde kodda objenin üstüne nasıl adapte edebilirim gösterirmisiniz. Yıldım gerçekten bir date formatı yüzünden 2 gündür kendimi salak gibi hissediyorum.

# --------------------KUTUPHANELER--------------------
# ----------------------------------------------------

import sys
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import *
from PyQt5.QtGui import QIcon
from StudentUI import *

# --------------------UYGULAMA OLUŞTUR----------------
# ----------------------------------------------------

uygulama = QApplication(sys.argv)
penUyeKayitFormu = QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(penUyeKayitFormu)
penUyeKayitFormu.show()

# ------------------VERITABANI OLUŞTUR----------------
# ----------------------------------------------------

import sqlite3
global curs
global conn
conn = sqlite3.connect('student.db')
curs = conn.cursor()
srgCreTblStudent = ("""CREATE TABLE IF NOT EXISTS student(                                                                 \
                   Id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,                                                      \
                   AdSoyad TEXT NOT NULL,                                                                              \
                   OkulNo TEXT NOT NULL ,                                                                              \
                   Sube TEXT NOT NULL,                                                                                 \
                   Burslu TEXT NOT NULL,                                                                               \
                   YabanciDil TEXT NOT NULL,                                                                           \
                   DogumTarihi TEXT NOT NULL                                                                          \
                   )""")
curs.execute(srgCreTblStudent)
conn.commit()  # Veritabaniyla Baglantiyi Kuruyoruz.


# -----------------------KAYDET-----------------------
# ----------------------------------------------------

def EKLE():
    _led_AdSoyad = ui.led_AdSoyad.text()  # current.item().text() Listelerdeki itemlara ulasma kodu.
    _led_OkulNo = ui.led_OkulNo.text()
    _cob_Sube = ui.cob_Sube.currentText()
    if ui.chb_Burslu.isChecked():
        _chb_Burslu = "Evet"
    else:
        _chb_Burslu = "Hayır"
    _lsw_YabanciDil = ui.lsw_YabanciDil.currentItem().text()
    #_clr_DogumTarihi = ui.clr_DogumTarihi.selectedDate().toString(QtCore.Qt.ISODate)
    #_dat_DogumTarihi = ui.dat_DogumTarihi.setCalendar(QCalendarWidget.selectedDate(QtCore.Qt.ISODate))
    #_dat_DogumTarihi = ui.dat_DogumTarihi.calendarWidget().selectedDate().toString(QtCore.Qt.ISODate)
    #_dat_DogumTarihi = ui.dat_DogumTarihi.setDate(QCalendarWidget.selectedDate())
    ui.dat_DogumTarihi.date



    curs.execute("""INSERT INTO student (AdSoyad, OkulNo, Sube, YabanciDil, DogumTarihi, Burslu)
        VALUES (?,?,?,?,?,?)""", (_led_AdSoyad, _led_OkulNo, _cob_Sube, _chb_Burslu, _lsw_YabanciDil, _dat_DogumTarihi))
    conn.commit()



# ------------------SIGNAL SLOT-----------------------
# ----------------------------------------------------
ui.btn_Kaydet.clicked.connect(EKLE)

sys.exit(uygulama.exec_())

dateEdit, değişken ismi. QDateEdit nesnesi. Yani sizin kodlarınızda dat_DogumTarihi.

Veritabanına tarih eklerken zorlanırsanız diye bir örnek hazırladım;

import sys
import sqlite3 as sql
from PySide2.QtWidgets import*
from PySide2.QtCore import*
from PySide2.QtGui import*



class Pencere(QMainWindow):
	def __init__(self):
		super(Pencere, self).__init__()
		self.resize(600,400)

		self.widget = QWidget()

		self.dateEdit = QDateEdit()
		self.dateEdit.setCalendarPopup(True)
		self.add = QPushButton("Ekle")
		self.add.clicked.connect(self.add_date)

		self.layout = QVBoxLayout(self.widget)
		self.layout.addWidget(self.dateEdit)
		self.layout.addWidget(self.add)

		self.setCentralWidget(self.widget)
		self.setLayout(self.layout)


	def add_date(self):
		with sql.connect("database.db") as db:
			cursor = db.cursor()
			date = self.dateEdit.date().toPython()
			cursor.execute("CREATE TABLE IF NOT EXISTS trial (birthday_date date)")
			cursor.execute("INSERT INTO trial(birthday_date) VALUES (?)", (date,))
			db.commit()


if __name__ == "__main__":
	app = QApplication(sys.argv)
	window = Pencere()
	window.show()
	sys.exit(app.exec_())

@aib 'in bahsettiği date() metodunu kullandım. calendarWidget’a göre daha az kod yazmamızı sağlıyor ve aslında tam olarak da bu iş için oluşturulmuş bir metod. QCalendarWidget nesnesi ile çalışmak isterseniz calendarWidget() kullanın.

date() metodundan dönen QDate nesnesini string tipine dönüştürüp parse etmek yerine, doğrudan bir datetime.date nesnesi olarak döndürüp (toPython) ekledim. Çünkü tam olarak istenilen formatta.

Valla abi ben noktaya basınca hiç bir ley gelmediği için elle yazıyom bence sende de buna benzer bir şey oldu

Çok teşekkür ederim çok uğraştırdım sizi. Yarın bakacağım artık bugün yeterince demoralize oldum. Elim gitmiyor hiçbir şeye. Ne tarihmiş arkadaş.

Merhabalar @Oguz_Turkyilmaz .Qt kodlarını Designer’dan değil de manuel olarak yazmanızı öneriyorum.Hem daha faydalı olur,daha çok öğrenirsiniz.Ayrıca video çözümleri anlayabilirsiniz.Ayrıca bazı şeyler Designer ile yapılınca hayali olabiliyor.

Sanırım haklısınız ama kafam takıldı bir kere QTDesigner Formu üzerinden nasıl bu kadar çetrefilli olabilir ki bir tarihi VT ye kaydetmek . Video dersdeki herşeyi öğrendim takır takır her türlü veriyi Form üzerinden VT ye kaydedebiliyorum, @ggns7 sayesinde kod ile form oluşturup Tarih ekleme yolunu da öğrendim sağolsun, ama bu yöntemi .ui uzantılı form üzerindeki uygulamaya adapte etmeyi beceremedim olmuyor bir türlü velhasıl kelam kafam basmadı çöktüm…

Bunun sebebi, video kaynaklar ve düşük programlama becerisi. Dokümantasyon okuyun, kod okuyun. Her zaman ihtiyacınızdan fazlasına el atmaya çalışın. Örneğin bir metod veya yöntem denediniz ve istediğiniz sonucu elde ettiniz. “Tamamdır” deyip, bırakmayın. “Acaba şöyle yapsaydım, nasıl olurdu?” diyebiliyorsanız kesinlikle üzerine gidin. Çok tecrübeli değilim ama naçizane düşünce ve tavsiyelerim bunlardır :slight_smile:

1 Beğeni

Söylediklerinize kesinlikle katılıyorum ben görsel olarak izlediğim konuları çok çabuk kapabiliyorum ama iş okuduklarımdan bir şeyler üretmeye gelince orda çuvallıyorum çünkü dediğiniz gibi programlama becerim yok zaten konuya da hakim değilim. Şuan QT Desiger ile birçok widget kullanarak girilen bilgileri VT ye kaydedebiliyorum ama tarih olayını çözemedikten sonra şuan konularda daha ileriye gitmeyeceğim. Öğrendiğim konuları pekiştiririm ancak. Çünkü yapma amacım olan projede 3 yerde tarih kaydetmem gerekiyor. İnternette aramaya devam edeceğim benzer bir konu bulursam öğrenip devam edebilirim. C# videolarını izliyorum şu anda. Belki videolarda tarih kaydı ile ilgili bir bilgi yakalarsam ordan devam ederim. Teşekkürler.

Size hem yazılı hem resimli bir kaynak lazım yani.Hem tarih kaydetmeyi,hem de C# öğrenmeyi bir arada götürmemelisiniz.Bence arayüz için C veya C++ kullanın.Bu sayede bir projeyi iki dil ile birlikte yapmış ve işleri bayağı bir ilerletmiş olursunuz.Bence bugün dinlenin,elinize kağıt kalem alın ve neyi nasıl yapmalıyım,nerden gitmeliyim diye sorun kendinize.Sayfanın ön tarafına dümdüz bir yol çizin.Şu anda olduğunuz -yani başladığınız- yeri en alta işaretleyin.Sayfanın öbür ucuna kadar dümdüz bir çizgi çekin.Duraklarınızı ve hedefinizi işaretleyin.Ardından sayfanın arkasına ilk durağınıza kadar hangi yollardan geçeceğinizi işaretleyin.Yolun dışına çıkmadan ve durakları atlamadan ilerlemeye çalışın.