PyQt5 Arayüz gelistirmede yardiminiza ihtiyacim var

PyQt5’i yeni ogrenmeye basladim. Designer kullanmak istemiyorum. Arastirdiğim bütün kaynaklar neredeyse Designer kullanılarak yapilmiş. kodlama yaparak kendimi gelistirmek istiyorum. Ama takildim, 1-2 haftadır ilerlemeye calisiyorum fakat, ilerleyemedim. İngilizcemde olmadigi icin sıkıntım daha da artıyor. En sonunda buraya yazarak sizden yardım istemek zorunda kaldım.

Kutulara veriler girildikten sonra ekle dediğimde, girdileri tabloya eklenmesini, ve program tekrar acıldıgında, bütün verilerin tabloda gösterilmesini,
tablodan veri silmek istediğimde, uyarı mesaj vermesini, TAMAM denildiğinde silmesini, HAYIR diyince kalmasını,
Kaydet dediğimde kaydedilmesini,
Çıkıs ve X’e basildiğinda, değişiklikler kaydedilsinmi uyarı mesajı vermesini, TAMAM denildiğinde değişikliklerin kaydedilmesini, HAYIR diyince kalmasını,
Arama kutusuna metin yazıldıkca, yazılan kısıma kadar olan verilerin tabloda listelenmesini,
tabloda Stok sutuna tıklayip, azaltma veya arttırma işlemlerinden sonra kaydedilsinmi uyarı verilmesini,TAMAM denildiğinde kaydedilmesini, HAYIR diyince kalmasını, bütün bunları yapmaya calisiyorum lakin bir türlü yapamadim.

Rica etsem kodlara ekleme yapip, yorum satısıyla açıklama yazarmısınız. kodlarımda hata varsa ve daha az nasıl kod kullanırım düzenlemesinide yaparmısınız.

import sqlite3
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5 import QtWidgets
from PyQt5.QtCore import *
from PyQt5.QtGui import QIcon
from PyQt5.QtGui import QFont


class Program(QMainWindow):
    def __init__(self):
        super(Program, self).__init__()
        self.setGeometry(400, 200, 1200, 600)
        self.setWindowTitle("Classla Pencere Olusturma")
        self.setWindowIcon(QIcon("brode.png"))
        self.icerik()
        self.tablo_olustur()



    def icerik(self):
        self.etiket1 = QLabel(self)
        self.etiket1.setText("DESEN KODU:")
        self.etiket1.move(10, 20)
        self.etiket1.resize(100, 12)
        self.etiket1.setFont(QFont('Helvetica', 11))

        self.etiket2 = QLabel(self)
        self.etiket2.setText("DESEN VURUŞU:")
        self.etiket2.move(10, 45)
        self.etiket2.resize(110, 20)
        self.etiket2.setFont(QFont('Helvetica', 11))

        self.etiket3 = QLabel(self)
        self.etiket3.setText("BANT SAYISI:")
        self.etiket3.move(10, 75)
        self.etiket3.resize(100, 20)
        self.etiket3.setFont(QFont('Helvetica', 11))

        self.etiket4 = QLabel(self)
        self.etiket4.setText("BANT VURUŞU:")
        self.etiket4.move(10, 105)
        self.etiket4.resize(120, 20)
        self.etiket4.setFont(QFont('Helvetica', 11))

        self.etiket5 = QLabel(self)
        self.etiket5.setText("EK BANT SAYISI:")
        self.etiket5.move(10, 135)
        self.etiket5.resize(120, 20)
        self.etiket5.setFont(QFont('Helvetica',11))

        self.etiket6 = QLabel(self)
        self.etiket6.setText("STOK:")
        self.etiket6.move(10, 165)
        self.etiket6.resize(50, 20)
        self.etiket6.setFont(QFont('Helvetica',11))

        self.etiket7 = QLabel(self)
        self.etiket7.move(450,350)
        self.etiket7.resize(450,50)
        self.etiket7.setFont(QFont('Helvetica', 12))



        self.giris1 = QLineEdit(self)
        self.giris1.move(130,15)
        self.giris1.resize(120,20)
        self.giris1.setFont(QFont('width', 11))

        self.giris2 = QLineEdit(self)
        self.giris2.move(130,45)
        self.giris2.resize(120,20)
        self.giris2.setFont(QFont('width', 11))

        self.giris3 = QLineEdit(self)
        self.giris3.move(130, 75)
        self.giris3.resize(120, 20)
        self.giris3.setFont(QFont('width', 11))

        self.giris4 = QLineEdit(self)
        self.giris4.move(130, 105)
        self.giris4.resize(120, 20)
        self.giris4.setFont(QFont('width', 11))

        self.giris5 = QLineEdit(self)
        self.giris5.move(130, 135)
        self.giris5.resize(120, 20)
        self.giris5.setFont(QFont('width', 11))

        self.giris6 = QLineEdit(self)
        self.giris6.move(130, 165)
        self.giris6.resize(120, 20)
        self.giris6.setFont(QFont('width', 11))

        self.giris7 = QLineEdit(self)
        self.giris7.move(450,400)
        self.giris7.resize(150,25)
        self.giris7.setFont(QFont('width', 11))



        self.buton1 = QPushButton(self)
        self.buton1.setText('EKLE')
        self.buton1.move(300,15)
        self.buton1.setFont(QFont('width', 10))
        self.buton1.clicked.connect(self.Ekle)

        self.buton2 = QPushButton(self)
        self.buton2.setText('SİL')
        self.buton2.move(300, 55)
        self.buton2.setFont(QFont('width', 10))
        self.buton2.clicked.connect(self.Sil)


        self.buton3 = QPushButton(self)
        self.buton3.setText('KAYDET')
        self.buton3.move(300, 95)
        self.buton3.setFont(QFont('width', 10))
        self.buton3.clicked.connect(self.Kaydet)


        self.buton4 = QPushButton(self)
        self.buton4.setText('ÇIKIŞ')
        self.buton4.move(300,135)
        self.buton4.setFont(QFont('width',10))
        self.buton4.clicked.connect(self.Cikis)

        self.buton5 = QPushButton(self)
        self.buton5.setText('ARAMA')
        self.buton5.move(610,400)
        self.buton5.resize(110,25)
        self.buton5.setFont(QFont('width', 10))
        self.buton5.clicked.connect(self.Arama)


        self.tablo = QTableWidget(self)
        self.tablo.setColumnCount(6)
        self.tablo.setRowCount(999)
        self.tablo.move(450, 20)
        self.tablo.resize(650, 325)
        self.tablo.setHorizontalHeaderLabels(["DESEN KODU", "DESEN VURUŞU", "BANT SAYISI", "BANT VURUŞU", "EK BANT", "STOK"])


    def Ekle(self):
        pass
    def Sil(self):
        pass
    def Kaydet(self):
        pass
    def Cikis(self):
        pass
    def Arama(self):
        pass




    def tablo_olustur(self):
        self.baglanti = sqlite3.connect("desenler.db")
        self.cur = self.baglanti.cursor()
        self.cur.execute("create table if not exists urunler(desenKodu TEXT,desenVurusu INT,bantSayisi INT,bantVurusu INT,ekBant INT,stok INT)")
        self.baglanti.commit()

    def veri_ekle(self):
        sorgu = ("INSERT INTO desenler VALUES ('28YG146CB',85000,6,42500,0,1000)")
        self.cur.execute(sorgu)
        self.conn.commit()

        self.veri_ekle()
        self.baglanti.close()

    def veriler(self):
        self.cur.execute("SELECT * FROM desenler")
        tumveri = self.cur.fetchall()
        return tumveri




def window():
    uygulama = QApplication(sys.argv)
    pencere = Program()
    pencere.show()
    sys.exit(uygulama.exec_())


window()

eklemek veya silmek istediğin işleri veritabanındamı yapmak istiyorsun yoksa tablewidget üzerinden mi?

Bu islemleri tablowidget uzerinde yapmak istiyorum.

peki veritabanı neden kullandınız ?
eklediğiniz verileri çekmek için değil mi

ben size bir kod yazacağım bunu kullanın
bekleyin

Teşekkur ederim,sizi bekliyorum.

yazıyorum bekleyin biraz uzun

import sqlite3
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5 import QtWidgets
from PyQt5.QtCore import *
from PyQt5.QtGui import QIcon
from PyQt5.QtGui import QFont
from PyQt5.QtGui import QPalette
from PyQt5.QtWidgets import  QMessageBox



class Program(QMainWindow):
    def __init__(self):
        super(Program, self).__init__()
        self.setGeometry(400, 200, 1200, 600)
        self.setWindowTitle("Classla Pencere Olusturma")
        self.setWindowIcon(QIcon("brode.png"))


        self.baglanti = sqlite3.connect("C:/Users/win10/Desktop/Yeni klasör (2)/desenler.db") # ben kendi bilgisayarımdaki yolu verdim siz yolu verirsiniz
        self.cur = self.baglanti.cursor()
        #desen kodunu otomatik artan bir değer yaptık cünkü silme işleminde bunu kullanacağız
        self.cur.execute("create table if not exists urunler(desenKodu INTEGER PRIMARY KEY AUTOINCREMENT,desenVurusu TEXT,bantSayisi TEXT,bantVurusu TEXT,ekBant TEXT,stok TEXT)")

        self.baglanti.commit()
        self.icerik()





    def icerik(self):
        self.etiket1 = QLabel(self)
        self.etiket1.setText("DESEN KODU:")
        self.etiket1.move(10, 20)
        self.etiket1.resize(100, 12)
        self.etiket1.setFont(QFont('Helvetica', 11))

        self.etiket2 = QLabel(self)
        self.etiket2.setText("DESEN VURUŞU:")
        self.etiket2.move(10, 45)
        self.etiket2.resize(110, 20)
        self.etiket2.setFont(QFont('Helvetica', 11))

        self.etiket3 = QLabel(self)
        self.etiket3.setText("BANT SAYISI:")
        self.etiket3.move(10, 75)
        self.etiket3.resize(100, 20)
        self.etiket3.setFont(QFont('Helvetica', 11))

        self.etiket4 = QLabel(self)
        self.etiket4.setText("BANT VURUŞU:")
        self.etiket4.move(10, 105)
        self.etiket4.resize(120, 20)
        self.etiket4.setFont(QFont('Helvetica', 11))

        self.etiket5 = QLabel(self)
        self.etiket5.setText("EK BANT SAYISI:")
        self.etiket5.move(10, 135)
        self.etiket5.resize(120, 20)
        self.etiket5.setFont(QFont('Helvetica',11))

        self.etiket6 = QLabel(self)
        self.etiket6.setText("STOK:")
        self.etiket6.move(10, 165)
        self.etiket6.resize(50, 20)
        self.etiket6.setFont(QFont('Helvetica',11))

        self.etiket7 = QLabel(self)
        self.etiket7.move(450,350)
        self.etiket7.resize(450,50)
        self.etiket7.setFont(QFont('Helvetica', 12))



        self.giris1 = QLineEdit(self)
        self.giris1.move(130,15)
        self.giris1.resize(120,20)
        self.giris1.setFont(QFont('width', 11))


        self.giris2 = QLineEdit(self)
        self.giris2.move(130,45)
        self.giris2.resize(120,20)
        self.giris2.setFont(QFont('width', 11))

        self.giris3 = QLineEdit(self)
        self.giris3.move(130, 75)
        self.giris3.resize(120, 20)
        self.giris3.setFont(QFont('width', 11))

        self.giris4 = QLineEdit(self)
        self.giris4.move(130, 105)
        self.giris4.resize(120, 20)
        self.giris4.setFont(QFont('width', 11))

        self.giris5 = QLineEdit(self)
        self.giris5.move(130, 135)
        self.giris5.resize(120, 20)
        self.giris5.setFont(QFont('width', 11))

        self.giris6 = QLineEdit(self)
        self.giris6.move(130, 165)
        self.giris6.resize(120, 20)
        self.giris6.setFont(QFont('width', 11))

        self.giris7 = QLineEdit(self)
        self.giris7.move(450,400)
        self.giris7.resize(150,25)
        self.giris7.setFont(QFont('width', 11))

        # bu kod ile direk filtreleme işlemi yapacağız
        self.giris7.textChanged.connect(self.Arama)







        self.buton1 = QPushButton(self)
        self.buton1.setText('EKLE')
        self.buton1.move(300,15)
        self.buton1.setFont(QFont('width', 10))
        self.buton1.clicked.connect(self.Ekle)

        self.buton2 = QPushButton(self)
        self.buton2.setText('SİL')
        self.buton2.move(300, 55)
        self.buton2.setFont(QFont('width', 10))
        self.buton2.clicked.connect(self.Sil)

        # KAYDET BUTONA GEREK YOK BUNU EKLE VE SİL BUTONLARI İLE YAPTIK
        self.buton3 = QPushButton(self)
        self.buton3.setText('KAYDET')
        self.buton3.move(300, 95)
        self.buton3.setFont(QFont('width', 10))
        self.buton3.clicked.connect(self.Kaydet)




        self.buton4 = QPushButton(self)
        self.buton4.setText('ÇIKIŞ')
        self.buton4.move(300,135)
        self.buton4.setFont(QFont('width',10))
        self.buton4.clicked.connect(lambda :self.close()) # bu koda direk kapatabilirsin gerekli komutları yazarsın message box ile sana bırakıyorum yes ise kapatsın no derse kapatmasın gibi.

        # ARAMA BUTONUNA GEREK YOK BUNU LİNE EDİT İLE FİLTRELEME METODU İLE YAPACAĞIZ
        #self.buton5 = QPushButton(self)
        #self.buton5.setText('ARAMA')
        #self.buton5.move(610,400)
        #self.buton5.resize(110,25)
        #self.buton5.setFont(QFont('width', 10))
        #self.buton5.clicked.connect(self.Arama)

        #refresh butonu
        self.buton6 = QPushButton(self)
        self.buton6.setText('REFRESH')
        self.buton6.move(1000, 360)
        self.buton6.clicked.connect(self.tablo)





        self.tablo = QTableWidget(self)
        self.tablo.setColumnCount(6)
        #self.tablo.setRowCount(999)
        self.tablo.move(450, 20)
        self.tablo.resize(650, 325)
        #self.tablo.setHorizontalHeaderLabels(["DESEN KODU", "DESEN VURUŞU", "BANT SAYISI", "BANT VURUŞU", "EK BANT", "STOK"])
        self.tablo.currentItemChanged.connect(self.doldur)

    def doldur(self):
        row = self.tablo.currentRow() # eğer hiç bir satır seçilmezse currentRow -1 döndürüyor
        if row != -1:
            self.giris1.setText(self.tablo.item(row,0).text())
            self.giris2.setText(self.tablo.item(row,1).text())
            self.giris3.setText(self.tablo.item(row,2).text())
            self.giris4.setText(self.tablo.item(row,3).text())
            self.giris5.setText(self.tablo.item(row,4).text())
            self.giris6.setText(self.tablo.item(row,5).text())
            self.giris1.setEnabled(False)
            print(self.giris1)

    def tablo(self):

        #line editlerin kontrollerını yaparsınız clear,sayı olup olmadıgını veya string olup olmadığını takılırsanız söylersiniz



        self.tablo.setHorizontalHeaderLabels(["DESEN KODU", "DESEN VURUŞU", "BANT SAYISI", "BANT VURUŞU", "EK BANT", "STOK"])
        self.tablo.horizontalHeader().setSectionResizeMode(QtWidgets.QHeaderView.Stretch) # buralar yayma ayarları
        self.tablo.setSelectionMode(QtWidgets.QAbstractItemView.SingleSelection)
        self.tablo.setAlternatingRowColors(True) # renk ayarı true
        #satırların renk ayarları
        pallete = self.tablo.palette()
        pallete.setColor(QPalette.Background, QColor(60, 60, 60))
        pallete.setColor(QPalette.AlternateBase, QColor("darkkhaki")) # içindeki rengi değiştirerek hangi satıra denk geldiğini görebilirsin
        pallete.setColor(QPalette.Base, QColor('#bbb'))

        #self.tablo.setPalette(pallete) # yaptığımız ayarları set ettik
        read = self.cur.execute("""SELECT * FROM urunler""")
        rows = read.fetchall()
        print(rows)


        self.tablo.setRowCount(0)
        for row_number,row_data in enumerate(rows):
            self.tablo.insertRow(row_number)
            for columb_number,data in enumerate(row_data):
                self.tablo.setItem(row_number, columb_number, QtWidgets.QTableWidgetItem(str(data)))





    def Ekle(self):
        kod = self.giris1.text()
        vurus = self.giris2.text()
        sayi = self.giris3.text()
        bant_vurus = self.giris4.text()
        ek_sayi = self.giris5.text()
        stok = self.giris6.text()

        insert = """INSERT INTO urunler(desenKodu,desenVurusu,bantSayisi,bantVurusu,ekBant,Stok) VALUES (?,?,?,?,?,?)"""
        values = (kod,vurus,sayi,bant_vurus,ek_sayi,stok)

        cevap = QMessageBox.question(self, "KAYIT EKLE", "Kayıt eklemek istediğinize emin misiniz?", \

                                     QMessageBox.Yes | QMessageBox.No)
        if cevap == QMessageBox.Yes:
            try:

                self.cur.execute(insert,values)
                self.baglanti.commit()
                # burada status barı kullanın altta yazı yazsın araştırırsınız bilerek eklemedim
                print("Verier eklendi")
            except:
                print("Eklenmede hata var")


        else:
            pass

    def Sil(self):
        cevap = QMessageBox.question(self, "KAYIT Sil", "Kaydı silmek istediğinizden emin misiniz?", \

                                     QMessageBox.Yes | QMessageBox.No)
        if cevap == QMessageBox.Yes:
            silinecek = self.giris1.text()

            try:
                self.cur.execute("""DELETE FROM urunler Where desenKodu = ?""",(silinecek)) # desenkoduna göre sildik
                self.baglanti.commit()
                print("Silme başarılı")
            except Exception as Hata:
                print(str(Hata)) # bu kez farklılık olsun diye hatayı direk string tipinde aldık
        else:
            pass
    # KAYDET BUTONUNA GEREK YOK
    def Kaydet(self):
        pass
    #def Cikis(self): # burayı sen halledersin sana bırakıyorum basit bir şey zaten yukarda lambda ile yazdım
     #   pass


    # arama butonunu kaldırdık sadece line edit gözükecektir 
    def Arama(self,aranacak):
        # bu kod direk tablo üzerinden arar veritabanı ile alakası yok
        # dikkat et desenvuruşuna göre arar desenvuruşunda ne görürsen onu arar kaydı 4 olanların verilerini getirir

        try:
            col = 1
            roww = self.tablo.rowCount()
            for row in range(roww):
                item = self.tablo.item(row,col)
                if item is not None:
                    if aranacak.lower() in item.text().lower():
                        self.tablo.showRow(row)
                    else:
                        self.tablo.hideRow(row)
        except Exception as Hata:
            print(str(Hata))


    def veri_ekle(self):
        sorgu = ("INSERT INTO desenler VALUES ('28YG146CB',85000,6,42500,0,1000)")
        self.cur.execute(sorgu)
        self.conn.commit()

        self.veri_ekle()
        self.baglanti.close()

    def veriler(self):
        self.cur.execute("SELECT * FROM desenler")
        tumveri = self.cur.fetchall()
        return tumveri



def window():
    uygulama = QApplication(sys.argv)
    pencere = Program()
    pencere.show()
    sys.exit(uygulama.exec_())


window()





tablonun üzerindeki verilere tıkladığınızda otomatik hepsini line edite verecek

sil butonuna basarsanız ilgili satırı silecektir

Hocam Vakit ayirdiginiz icin çok teşekkür ederim.
QLineEdit kutularına verileri girip ekle dediğimde uyarı mesajı veriyor. onu kaldıramazmıyız. verileri girip ekle dediğimde, tablowidget içine eklemiyor. sadece uyarı mesajını veriyor.

kodları çalıştırdıgımda tablo baslıkları görünmüyor, refresh diyince görünüyor.
arama kutusunda filtreleme işlemini vuruşa göre değilde, Desen koduna göre ayarlayamazmıyız.

ayrıca, cıkıs ve x tusuna bastıgımda değişiklikler kaydedilsinmi gibi uyarı mesajını vermesini istiyorum ama, kodu calıstırdıgımda vermiyor.
veritabani işlemlerinde kodları ben sanırım bozdum. tablo olusturma ve veri ekleme işlemi yapmiyor.

inanın ben suan PyQt5’te cok acemiyim. ornek uygulamalar benim için hepsi birer kaynaklar. bana ve benim gibi yeni baslayanlara birakmadan hazir bir sekilde kodlasanız, benim gibi yeni baslayan arkadaslarda yaptiginiz uygulamalara bakarak eğitimlerine devam etse cok güzel olur. internetteki videolara bakip aynısını yapmak yerine, bazı seyleri değiştirerek kendim yapmak istiyorum.

yakın zamanda ya bi dil kursuna gideceğim ya da özel ders alacağim. yuzeysel eğitim almadan once biraz alt yapiyi kurmak istiyorum.

müsaitseniz uzak bağlanarak yapalım

sizin bilgisayarınıza uyarlayalım

lütfen merak etmeyin bende acemiyim böyle yazdığıma aldanmayın sadece qt de fazla zaman geçirdim o kadar

ozelden mesaj attim, bakarmisiniz