Python ile SQLite içinde bulunan verileri ComboBox içine çekmek

Merhabalar,

Ben veritabanımda bulunan verileri oluşturmuş olduğum combobox içine çekmek istiyorum.
Örneğin;

Sınıf ve öğrencilerin olduğu iki ayrı veritabanım var. Burada ilk combobox ile sınıfları ikinci combobox ile de bu sınıftaki öğrencilerin isimlerini görmek istiyorum. Örnek çalışmayı paint ile çizmeye çalıştım ek olarak ekledim.

Bunu nasıl yapabilirim acaba?

Teşekkür ederim.

sql bağlantısını kurdunuz sadece ekrana yazdırma kısmını mı soruyorsunuz, yoksa tamamını nasıl yaparsınız o kısmını mı soruyorsunuz?

Eğer tam anlatamadıysam özür dilerim. Ben sqlite kurdum ve iki veritabanımı da oluşturdum. Burada ilk ver tabanım ile sınıf combobox, ikinci database ile de ikinci combobox ilişkilendirmek istiyorum. Ancak ikinci combobox ile öğrenci seçildikten sonra aşağıdaki alanda bu öğrenci ile ilgili bilgileri ikinci veritabanımdan getirmek istiyorum.

Umarım anlatabilmişimdir. Ben şu ana kadar veritabanımı oluşturdum ve arayüzü tasarladım. Ancak bu arayüzdeki combobox ile sqlite veritabını ilişkilendiremedim.

çözümünü buldun mu
aynı sorunu yaşıyorum

Maalesef bulamadım. Kimse dönüş yapmayınca ben de yurt dışı kaynaklarına baktım ancak oradan da yardım eden birini bulamadım. Ancak bulursan bende öğrenmek isterim

Tkinter Combobox options taken from MySQL, SQLite database table, CSV file and Json string - YouTube

Birinci linke combo box ı videodaki gibi çekerek listeleyebilirsiniz.

Combo box ı seçim olayına ikinci komboyu oluşturacak sorguyu yerleştirirseniz.

Birinci liste oluşur, seçince, sorgu ile aldığınız isim listesini aynı mantıkla ikinci kombo box a yerleştirebilirsiniz.

Bu da videonun metni…

Adding options to Tkinter Combobox by using data from MySQL,SQLite table,CSV file and JSon string (plus2net.com)

Deneyin yapamazsanız beraber bakmaya çalışalım. Tabi vakit ayırabilirsem.

from PyQt5 import QtCore, QtGui, QtWidgets
import sys
import sqlite3
import tkinter as tk
import tkinter.ttk as ttk

my_conn=("sqlite:///C:\\Users\\Lenovo\\Desktop\\yeni\\shop_data.db")
query="SELECT * FROM Adsoyad"
my_data=my_conn.execute(query)
my_list=[r for r, in my_data]

my_w = tk.Tk()
my_w.geometry("300x150")
my_w.title("www.plus2net.com")
path="shop_data.db"
fob=open(path,)

cb1=ttk.Combobox(my_w,values=my_list)
cb1.grid(row=1,column=1,padx=10,pady=20)
cb1.current(1)

böyle birşey yaptım fakat olmadı hata verdi. tkinterden başka modül ile olmuyor mu illa tkinnter mı olması gerekli ? pyqt5 ile yapamıyor muyuz ? internette araştırdım ama bulamadım…

Olur niçin olmasın?

Hangi gui’yi kullanmak isterseniz onda olur.

Hata verir. Hatalar neden verilir, neyi yanlış yaptığınızı bulup düzeltebilesiniz diye. Yoksa neden hata mesajı versin durduk yere, peki hatayı düzeltmek yerine neden başka bir arayüz kullanalım o kısmı anlamadım.

Tabi qt ile de yabılabilir.

İşte bu fena. İnternette bulamadım deyince endişeleniyorum, bulamamak mümkün değil.

PyQt5 QTableWidget tutorial: Load data from SQL table into Table Widget [Python, SQLite, PyQT5] - YouTube

Yukarıdaki örneği bir inceleyin belki bu işinize yarar.

evet haklısınız hatayı düzeltmek gerekli ama ben bunu pyqt5 ile yazdığım gui programının içine entegre edeceğim için çok fazla modül kullanmış oluyorum. Buda benim programımın yavaşlamasına neden oluyor. O yüzden bende hatayı düzeltmek yerine pyqt5 ile yazılamazmı diye sordum.

ben tablo oluşturmayı bulamadım demedim. pyqt5 ile combobox içerisine veritabanından veri aktaran veya onu anlatan bir örnek yazı veya video bulamadım dedim. Tamam burada da kısmi olarak haklısınız çünkü yeni başladığım için belkide dogru cümleyi kurup aratamamış olabilirim.

o zaman pyqt5 ve sqlite3 kütüphanelerini kullanıyorum ve qt designer ile tasarım yaptım örnek olarak bir kodlama paylaşabilir misiniz?

1nci combobox name cmburunturu
2nci comboboc name cmburunismi

yukarıdaki resime göre bir örnek kod paylaşırsanız memnun olurum…

from tkinter import *
from tkinter import ttk
import sqlite3


baglanti = sqlite3.connect("shop_data.db")
imlec = baglanti.cursor()

"# DATABASE İÇİNDE TABLO OLUŞTURMA"
imlec.execute("CREATE TABLE IF NOT EXISTS shop(adsoyad TEXT)")
baglanti.commit()


pencere = Tk()
pencere.geometry("400x300")

def kayit():
    imlec.execute("INSERT INTO shop VALUES (?)", (cbx_adsoyad.get(),))
    baglanti.commit()
    baglanti.close()
    cbx_adsoyad.delete(0, END)


def veriler():
    imlec.execute("SELECT * FROM shop")
    tumveri = imlec.fetchall()
    return tumveri

lbl_adsoyad = Label(pencere, text="Ad Soyad")
lbl_adsoyad.grid(row=0, column=0, padx=20, pady=20)


cbx_adsoyad = ttk.Combobox(pencere)
cbx_adsoyad.grid(row=0, column=1, padx=20)
cbx_adsoyad["values"] = [i for i in veriler()]
btn_kaydet = ttk.Button(pencere, text="Kaydet", command=kayit)
btn_kaydet.grid(row=0, column=2)

pencere.mainloop()

basit bir isim kayıt db si hazırladım maksat combobox un içine gelecek veriyi bulmak.
program üzerinde fazla çalışmadım anlık olarak isim listesi güncellenmiyor programı tekrar açarsanız eklediğiniz isim listenin altına eklenmiş olur.

Madem ısrarla qt5 ve sqlite3 olacak Peki:

Örnek kod.

Veri tabanı oluşturmak için basit bir kod:

import sys
from PyQt5.QtSql import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

def createDB():
    db = QSqlDatabase.addDatabase('QSQLITE')
    db.setDatabaseName('test.db')
    
    # try to open the database
    if not db.open():
        raise Error("Could not open the database")


    query = QSqlQuery()

    # create a table
    query.exec_('''create table t1( fruit TEXT, inventory int);''')

    # populate the table
    query.exec_("insert into t1 (fruit, inventory) values('banana', 3);")
    query.exec_("insert into t1 (fruit, inventory) values('mango', 10);")
    query.exec_("insert into t1 (fruit, inventory) values('cherry', 55);")
    
    db.close()
    
if __name__ == '__main__':
   app = QApplication(sys.argv)
   createDB()

Bu kodla iki sütun üç satır bir veri tabanı oluşturduk.

test.db adında.

import sys
from PyQt5.QtSql import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

class TableViewer(QMainWindow):
    def __init__(self):
        super().__init__()
        #createDB()
        
        self.db = QSqlDatabase.addDatabase('QSQLITE')
        self.db.setDatabaseName('test.db')
    
        # try to open the database
        if not self.db.open():
            raise Error("Could not open the database")


        self.model = QSqlTableModel(self, self.db)   
        self.model.setTable('t1')

 

        self.model.select()

        self.tview = QComboBox(self)
        self.tview.setModel(self.model)
        layout = QVBoxLayout()
        layout.addWidget(self.tview)
        
        widget = QWidget()
        widget.setLayout(layout)
        self.setCentralWidget(widget)

        self.show()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    tv = TableViewer()
    sys.exit(app.exec_())

Yukarıda da basit bir combox listeleyen kod.

image

image

Buda combox a listelenmiş görseli.

Kodu sağdan soldan toplayıp modifiye ettim şimdi linklerini de versem iyice kafan karışır.

Edit:

Yine de bakmak istersen, kod tabloya listeliyordu.

python - How to load data from SQLite database to tableview using the sqlite3 module - Stack Overflow

Ben de combo ya çevirdim.

elinize sağlık biraz fikir sahibi olmamı sagladı. tam istediğim gibi uyarlayamadım sizin yazdığınız kodu ama şimdi çok güzel bir şekilde hallettim. teşekkür ederim…

1 Beğeni