Seite 1 von 1

Daten aus Datenbank in eine Combobox im QT Designer

Verfasst: Donnerstag 3. Februar 2022, 21:15
von Mars82
HI,

ich versuche aus einer Tabelle aus einer Datenbank die Werte in eine Combobox zu lesen. Erstellt habe ich die GUI mit dem QT-Designer. Ich bekomme es nicht hin und nach stundenlanger
Google Suche dachte ich vielleicht kann mir hier geholfen werden:

Name der Combobox: combo

Hier der Quellcode:

Code: Alles auswählen

import sqlite3
from PySide6.QtWidgets import QApplication
from PySide6.QtWidgets import QMainWindow, QComboBox
from PySide6 import QtSql
from boerse import Ui_MainWindow



class Frm_main(QMainWindow, Ui_MainWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        self.bt_save.clicked.connect(self.datenschreiben)
        self.bt_finish.clicked.connect(self.ende)
        self.combo.addItems(self.combobox1())
      
     def combobox1(self):
        connection = sqlite3.connect("boerse.db")
        cursor = connection.cursor()
        sql1 = ("SELECT name FROM tb1")
        cursor.execute(sql1)
        pmList = cursor.fetchall()
        connection.commit()
        connection.close()
        return pmList
          
app = QApplication()
frm_main = Frm_main()
frm_main.show()
app.exec_()        
        
Für Hilfe wäre ich sehr dankbar.

Gruß Mars82

Re: Daten aus Datenbank in eine Combobox im QT Designer

Verfasst: Donnerstag 3. Februar 2022, 21:53
von __deets__
Hast du dir mal angeschaut, was combobox1 genau zurück liefert? Und was erwartet deiner Kenntnis nach addItems?

Re: Daten aus Datenbank in eine Combobox im QT Designer

Verfasst: Freitag 4. Februar 2022, 16:48
von Mars82
Hi _deets_

danke für deine schnelle Antwort. Ich habe mir es mal ausgeben lassen:

Code: Alles auswählen

import os, sys, sqlite3


connection = sqlite3.connect("boerse.db")
cursor = connection.cursor()
sql1 = ("SELECT name FROM tb1")
cursor.execute(sql1)
pmList = cursor.fetchall()
connection.commit()
connection.close()
print(pmList)
Ausgabe:

[('Biontec',), ('Ralf',), ('Apple',)]
>>>

addItem erwartet ja eine Liste und ich dachte das sieht wie eine Liste aus. Ist das falsch?

Gruß Mars82

Re: Daten aus Datenbank in eine Combobox im QT Designer

Verfasst: Freitag 4. Februar 2022, 19:30
von __blackjack__
@Mars82: `addItems()` erwartet eine Liste mit Texten, also mit Zeichenketten. Du hast da eine Liste mit Tupeln mit Zeichenketten.

``tb1`` ist übrigens kein guter Tabellenname. Erst mal weiss man nicht was ``tb`` bedeuten soll, und dann nummeriert man keine Namen. Gilt dann auch für das `sql1`. Die 1 gehört da nicht hin. Die Klammern um den Wert sind auch überflüssig. Und bei dem bisschen würde ich das auch nicht noch mal extra an einen Namen binden wollen.

`pm` wäre dann wieder eine kryptische Abkürzung. Und Grunddatentypen haben in der Regel nichts in Namen zu suchen. Allgemeiner Name für Datensätze aus einer Datenbankabfrage wäre beispielsweise `rows`.

Es wird normalerweise pro Modul eine eigene Import-Anweisung verwendet, und Du gehörst hoffentlich nicht zu den Leuten die prophylaktisch grundsätzlich mit ``import os, sys`` anfangen, egal ob die Module gebraucht werden oder nicht.

Ungetestet:

Code: Alles auswählen

#!/usr/bin/env python3
import sqlite3
from contextlib import closing


def main():
    with closing(sqlite3.connect("boerse.db")) as connection:
        with closing(connection.cursor()) as cursor:
            cursor.execute("SELECT name FROM table")
            names = [row[0] for row in cursor.fetchall()]
            connection.commit()
    
    print(names)


if __name__ == "__main__":
    main()

Re: Daten aus Datenbank in eine Combobox im QT Designer

Verfasst: Freitag 4. Februar 2022, 20:15
von Mars82
@_blackjack_
Hey super erstmal vielen Dank. Das hat auf Anhieb funktioniert. Problem somit gelöst.
Ebenfalls Danke für die Extra Tipps. Also ich lerne daraus eine ordentliche sinnvolle Benennung in der Syntax. Ich versuche nur die Module zu importieren die ich auch brauche.

Beste Grüße
Ralf Liebermann