QMainWindow ausserhalb der Klassen ansprechen ?

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
Ernie1412
User
Beiträge: 161
Registriert: Freitag 10. Januar 2020, 20:38

ich hab eine andere Klasse und möchte aus der Klasse etwas in eine Tabelle in QMainWindow, in meinem Fall die Klasse "Haupt_Fenster" etwas reinschreiben.
wie genau mache ich das ?
Hier der Aufruf ausserhalb der "Haupt_Fenster" Klasse:

Code: Alles auswählen

class Movie_Data:
    """
        Destrukter zum freigeben
    """
    def  __init__(self):        
        self.db= QSqlDatabase.addDatabase("QSQLITE")
        self.db.setHostName("localhost")
        self.db.setDatabaseName(str(SELF_PATH / 'DB/movies.db'))    
    def suchen(self,titel):        
        errorview="";zeile=0        
        self.db.open()            
        if self.db.isOpen():
            self.query = QSqlQuery(self.db)
            self.query.prepare(f"SELECT Titel,Performers,SceneCode,ProductionDate,Regie,Movies,Synopsis FROM MovieDaten WHERE Titel LIKE'%{titel}%';")
            self.query.exec() 
            while self.query.next():                
                Haupt_Fenster().tblWdg_Daten.setRowCount(zeile+1)
                Haupt_Fenster().tblWdg_Daten.setItem(zeile,0,QtWidgets.QTableWidgetItem(self.query.value("Titel")))
                Haupt_Fenster().tblWdg_Daten.setItem(zeile,3,QtWidgets.QTableWidgetItem(self.query.value("Performers")))  
                Haupt_Fenster().tblWdg_Daten.setItem(zeile,4,QtWidgets.QTableWidgetItem(self.query.value("SceneCode")))               
                Haupt_Fenster().tblWdg_Daten.setItem(zeile,5,QtWidgets.QTableWidgetItem(self.query.value("ProductionDate")))
                Haupt_Fenster().tblWdg_Daten.setItem(zeile,6,QtWidgets.QTableWidgetItem(self.query.value("Regie")))
                Haupt_Fenster().tblWdg_Daten.setItem(zeile,7,QtWidgets.QTableWidgetItem(self.query.value("Movies"))) 
                Haupt_Fenster().tblWdg_Daten.setItem(zeile,8,QtWidgets.QTableWidgetItem(self.query.value("Synopsis")))                
                zeile+=1            
            if zeile==0:                    
                errorview,zeile=(self.query.lastError().text(),0)
        self.db.close()
        return errorview,zeile
 if __name__ == "__main__":
    Movie_Data()
Benutzeravatar
sparrow
User
Beiträge: 4639
Registriert: Freitag 17. April 2009, 10:28

Das sollte keine Klasse sein sondern eine Methode in Haupt_Fenster() (die eigentlich HauptFenster heißen sollte).
Zumindest sehe ich hier nichts, was eine Klasse rechtfertigt.

#Mehr als eine Anweisung in eine Zeile zu schreiben und mit ; zu trennen ist super unübersichtlich.
Benutzeravatar
__blackjack__
User
Beiträge: 14336
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Es macht auch nicht so viel Sinn `Path` zu verwenden wenn man da in Teilpfaden dann doch wieder Pfadtrenner hart in Zeichenketten schreibt.

Ausserdem wird hier ein Wert in eine SQL-Anweisung als Zeichenkette hineinformatiert. Bei einer GUI wahrscheinlich eine Benutzereingabe. Also eine klassische SQL-Injection-Situation.
„Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.“ — Brian W. Kernighan
Antworten