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.
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.
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
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…
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.
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?
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.
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.
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.
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…