Her yeni veriye bir ID atamak

Not defteri uygulaması yapacağım ama şöyle bir sıkıntım var her notun id’si olacak not ekle -sil-değiştir komutlarıyla bu id 'kodunu nasıl ayarlayacağım bilmiyorum yardımcı olacak varsa cuma günü çok sevaba girer.

Eklenen her yeni nota digerlerinden farkli bir degeri ID olarak vermen lazim. En yaygin kullanilan iki yontem 1’den baslayip artan sayilar ve bir alfabeden rastgele harfler.

1 Beğeni

Rastgele ama eşsiz ID’ler oluşturarak amacına oluşabilirsin.
Aşağıya örnek bir kullanım bırakıyorum,

from random import randint
from datetime import datetime
import json

# Json dosyasından verileri çekiyoruz.
with open('data.json', 'r') as file:
    try:
        IDs = json.load(file)
    # Dosyanın içi boşsa hata alırız, bu yüzden try/except kullanalım.
    except json.decoder.JSONDecodeError:
        IDs = {}

# Rastgele ama eşsiz bir ID oluşturalım.
def generate_ID():
    while True:
        # 8 haneli bir ID oluşturalım. Toplamda 90.000.000 tane farklı ID oluşturulabilir.
        ID = str(randint(10000000, 99999999))
        # Eğer oluşturulan ID eşsiz ise return edelim.
        if ID not in IDs:
            return ID

# ID'nin oluşturulduğu tarih bilgisini alalım.
def get_time_data():
    time = datetime.now()
    return f"{time.day}.{time.month}.{time.year}, {time.hour}:{time.minute}"

# Oluşturulan ID'yi ve o ID'ye sahip notun içeriği ile ilgili bilgileri kaydedelim.     
ID = generate_ID()
IDs[ID] = {}
IDs[ID]["Creation Date"] = get_time_data()
IDs[ID]["Content"] = input("Not: ")

# Güncellenen IDs verisini tekrardan json dosyasına kaydedelim.
with open('data.json', 'w') as file:
    json.dump(IDs, file)
    

Konsol,

Not: Gunde en az 2 litre su icmeyi unutma
Not: Gun icerisinde hareketli olmayi ihmal etme

Dosya,

{"64828242": {"Creation Date": "24.12.2021, 17:18", "Content": "Gunde en az 2 litre su icmeyi unutma"}, "92387580": {"Creation Date": "24.12.2021, 17:19", "Content": "Gun icerisinde hareketli olmayi ihmal etme"}}

Bir arayüz kütüphanesi ile bu verileri ekranda gösterebilir ve düzenleyebilirsin. Yukarıdaki örneği şu şekilde geliştirebiliriz,

from random import randint
from datetime import datetime
import sys
import json

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

# Dosyadan verileri okuyabilmek için bir fonksiyon tanımlayalım.
def read_data():
    # Json dosyasından verileri çekiyoruz.
    with open('data.json', 'r') as file:
        try:
            return json.load(file)
        # Dosyanın içi boşsa hata alırız, bu yüzden try/except kullanalım.
        except json.decoder.JSONDecodeError:
            return {}

# Rastgele ama eşsiz bir ID oluşturabilmek için bir fonksiyon tanımlayalım.
def generate_ID(IDs):
    while True:
        # 8 haneli bir ID oluşturalım. Toplamda 9^8 tane farklı ID oluşturulabilir.
        ID = str(randint(10000000, 99999999))
        # Eğer oluşturulan ID eşsiz ise return edelim.
        if ID not in IDs:
            return ID

# ID'nin oluşturulduğu tarih bilgisini alabilmek için bir fonksiyon tanımlayalım.
def get_time_data():
    time = datetime.now()
    return f"{time.day:02}.{time.month:02}.{time.year}, {time.hour:02}:{time.minute:02}"


class UI(QMainWindow):
    def __init__(self):
        super().__init__()
        # Arayüzün boyutunu ayarlayalım.
        self.setFixedSize(400, 800)
        self.setWindowTitle("Not Defteri")
        self.show()
        # Notları seçebileceğimiz bir Combo Box oluşturalım.
        self.ComboBox = QComboBox(self)
        # Dosyayı okuyalım.
        self.IDs = read_data()
        # Dosyadan okunan verilere göre ComboBox'un item'lerini ekleyelim.
        self.ComboBox.addItems(self.IDs.keys())
        self.ComboBox.setGeometry(QRect(20, 20, 360, 60))
        self.ComboBox.show()
        self.current_ID = ""
        # Artık ID'ye göre not seçebiliyoruz, şimdi ise o ID'ye ait verileri görüntüleyelim.
        # Başlığı düzenleyebileceğimiz bir LineEdit oluşturalım.
        self.LineEdit = QLineEdit(text="Başlık", parent=self)
        self.LineEdit.setGeometry(QRect(20, 100, 360, 60))
        self.LineEdit.setAlignment(Qt.AlignCenter)
        self.LineEdit.show()
        # İçeriği düzenleyebileceğimiz bir TextEdit oluşturalım.
        self.TextEdit = QTextEdit(text="İçerik", parent=self)
        self.TextEdit.setGeometry(QRect(20, 180, 360, 280))
        self.TextEdit.show()
        # Oluşturulma tarihini görebilmek için Label oluşturalım.
        self.Tarih = QLabel(text="Oluşturulma Tarihi: gün.ay.yıl, saat:dakika", parent=self)
        self.Tarih.setGeometry(QRect(20, 480, 360, 60))
        self.Tarih.setAlignment(Qt.AlignCenter)
        self.Tarih.show()
        # Kaydetmek için buton ekleyelim.
        self.Kaydet = QPushButton(text="Kaydet", parent=self)
        self.Kaydet.setGeometry(QRect(20, 560, 360, 60))
        self.Kaydet.show()
        # Yeni bir not oluşturmak için buton ekleyelim.
        self.Olustur = QPushButton(text="Oluştur", parent=self)
        self.Olustur.setGeometry(QRect(20, 640, 360, 60))
        self.Olustur.show()
        # Notları silebilmek için buton ekleyelim.
        self.Sil = QPushButton(text="Sil", parent=self)
        self.Sil.setGeometry(QRect(20, 720, 360, 60))
        self.Sil.show()
        # Elemanları gerekli fonksiyonlara bağlayalım.
        self.ComboBox.currentTextChanged.connect(self.current_ID_changed)
        self.Kaydet.clicked.connect(self.save_note)
        self.Olustur.clicked.connect(self.create_note)
        self.Sil.clicked.connect(self.delete_note)

    # ComboBox'u güncellemek için bir fonksiyon oluşturalım.
    def update_ComboBox(self):
        self.ComboBox.clear()
        self.ComboBox.addItems(self.IDs.keys())
        self.ComboBox.update()

    # 'Kaydet' butonu için bir fonksiyon oluşturalım.
    def save_note(self):
        # Seçilmiş olan ID bilgisini alalım.
        ID = self.ComboBox.currentText()
        # Eğer seçilmemişse hiçbir şey yapılmasın.
        if ID != "":
            # Verileri çekip IDs'i güncelleyelim.
            self.IDs[ID]["Title"] = self.LineEdit.text()
            self.IDs[ID]["Content"] = self.TextEdit.toPlainText()
            # Güncellenen IDs'i dosyaya yazalım.
            with open('data.json', 'w') as file:
                json.dump(self.IDs, file)

    # 'Olustur' butonu için bir fonksiyon oluşturalım.
    def create_note(self):
        ID = generate_ID(self.IDs)
        date = get_time_data()
        self.IDs[ID] = {}
        self.IDs[ID]["Creation Date"] = date
        self.IDs[ID]["Title"] = "Başlık"
        self.IDs[ID]["Content"] = "İçerik"
        # ComboBox'un tüm item'lerini silip güncelleyelim.
        self.update_ComboBox()
        # Dosyayı güncelleyelim.
        with open('data.json', 'w') as file:
            json.dump(self.IDs, file)

    # 'Sil' butonu için bir fonksiyon oluşturalım.
    def delete_note(self):
        # Seçilmiş olan ID bilgisini alalım.
        ID = self.ComboBox.currentText()
        # Eğer seçilmemişse hiçbir şey yapılmasın.
        if ID:
            self.IDs.pop(ID)
            # ComboBox'un tüm item'lerini silip güncelleyelim.
            self.update_ComboBox()
            # Dosyayı güncelleyelim.
            with open('data.json', 'w') as file:
                json.dump(self.IDs, file)
            # Not silindikten sonra ComboBox'ta seçili kalacak ID varsa, onun verilerini ekrana aktaralım.
            new_ID = self.ComboBox.currentText()
            if new_ID:
                self.Tarih.setText(f"Oluşturulma Tarihi: {self.IDs[new_ID]['Creation Date']}")
                self.TextEdit.setText(self.IDs[new_ID]['Content'])
                self.LineEdit.setText(self.IDs[new_ID]['Title'])
            else:
                self.Tarih.setText(f"Oluşturulma Tarihi: gün.ay.yıl, saat:dakika")
                self.TextEdit.setText("İçerik")
                self.LineEdit.setText('Başlık')

    # ComboBox'ta herhangi bir ID seçildiğinde çalışacak bir fonksiyona ihtiyacımız var.
    def current_ID_changed(self, ID):
        # Eğer seçilen ID yeni ise, elemanları güncelleyelim.
        if ID != self.current_ID:
            date = self.IDs[ID]["Creation Date"]
            self.Tarih.setText(f"Oluşturulma Tarihi: {date}")
            self.TextEdit.setText(self.IDs[ID]['Content'])
            self.LineEdit.setText(self.IDs[ID]['Title'])
            self.current_index = ID


app = QApplication(sys.argv)
ui = UI()
app.exec_()

4 Beğeni

Reis iyi hoş da bu koddan gram anlamam xD eline sağlık yine de.

1 Beğeni

string değeri kullanıcıdan alıyorum ama listeye append yapamıyorum neden nasıl bir çözüm sunarsın ?

Kodu görmemiz lazım.