Seite 1 von 1

object der main Klasse, anstatt eines Strings?

Verfasst: Mittwoch 22. Juli 2020, 14:03
von VoLLioMenTT
Liebes Deutsches Python Form,

ich habe ein QWidget, dass eine Funktion des QMainWindows aufruft und diesem einen String übergibt.

Funktion im QWidget:

Code: Alles auswählen

@pyqtSlot()
    def on_click_bearbeiten(self):
        button = self.sender()
        if button:
            row = self.tableWidget.indexAt(button.pos()).row()
            
            reNr = int(self.tableWidget.item(row, self.column_reNr).text())

            self.parent().start_Rechnungupdaten(reNr)
die Funktion im QMainWindow bekommt diesen String auch noch richtig übergeben.

Funktion im QMainWindow:

Code: Alles auswählen

def start_Rechnungupdaten(self, reNr):
        self.Rechnungupdaten_Layout = Rechnungupdaten_Layout(self, reNr)
        self.setWindowTitle(self.title)
        self.setCentralWidget(self.Rechnungupdaten_Layout)
Also wenn ich die Variable reNr hier ausgebe passt alles.
Wie man jedoch sehen kann gebe ich diese weiter. (An ein anderes QWidget)

So sieht der beginn dieser Klasse aus:

Code: Alles auswählen

class Rechnungupdaten_Layout(QWidget):
    def __init__(self, reNr, parent=None):
        super(Rechnungupdaten_Layout, self).__init__(parent=None)

        self.reNr = reNr
        print(reNr)
Nun bekomme ich in dieser allerdings keinen String, sondern ein Object des MainWindows übergeben:
<__main__.MainWindow object at 0x7ff4064e14c0>
Ist vermutlich ein ganz dummer Vererbungsfehler, weiß jemand eine Lösung?

Schonmal vielen Dank im vorraus.

Re: object der main Klasse, anstatt eines Strings?

Verfasst: Mittwoch 22. Juli 2020, 14:38
von Sirius3
Benutze keine Abkürzungen, wenn Du rechnungsnummer meinst schreibe nicht reNr. Es ist komisch, dass Du mitten im Programmablauf nochmal eine Klasse vom Typ QWidget erzeugst. Widgets sollten eigentlich nachdem das Fenster aufgebaut ist, alle da sein.
`parent` wird in Rechnungupdaten_Layout gar nicht benutzt und beim Erzeugen übergibst Du als erstes Argument Dein Mainwindow, bindest das aber an reNr, und als zweites Argument reNr, bindest das aber an parent. Die zwei Argumente sollten wohl vertauscht sein.
So eine Direkte Kopplung vom Widget zum Parent sollte es eigentlich nicht geben, dafür ist ja in Qt der Signal-Slot-Mechanismus da.

Re: object der main Klasse, anstatt eines Strings?

Verfasst: Mittwoch 22. Juli 2020, 17:38
von VoLLioMenTT
Sirius3 hat geschrieben: Mittwoch 22. Juli 2020, 14:38 Benutze keine Abkürzungen, wenn Du rechnungsnummer meinst schreibe nicht reNr. Es ist komisch, dass Du mitten im Programmablauf nochmal eine Klasse vom Typ QWidget erzeugst. Widgets sollten eigentlich nachdem das Fenster aufgebaut ist, alle da sein.
`parent` wird in Rechnungupdaten_Layout gar nicht benutzt und beim Erzeugen übergibst Du als erstes Argument Dein Mainwindow, bindest das aber an reNr, und als zweites Argument reNr, bindest das aber an parent. Die zwei Argumente sollten wohl vertauscht sein.
So eine Direkte Kopplung vom Widget zum Parent sollte es eigentlich nicht geben, dafür ist ja in Qt der Signal-Slot-Mechanismus da.
Gut das war ein dummer Fehler.

Vielen Dank für die schnelle Antwort und die weiteren Tipps!