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: 4233
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: 13219
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.
“There will always be things we wish to say in our programs that in all known languages can only be said poorly.” — Alan J. Perlis
Antworten