Seite 1 von 1

Auslesen vom Editinhalt einer anderen Klasse (QT)

Verfasst: Montag 26. Oktober 2020, 09:01
von 3cosystem
Hallo Leute,

ich moechte ein Gui mit Tabs erstellen, die einige Elemente beinhalten.
Jeder Tab ist zur besseren Ansprechung in einer neuen Klasse.
Nach der Initiierung moechte ich auf den Status oder den Inhalt der Elemente zugreifen, um damit zu arbeiten.
Mittels return bekomme ich (natuerlich) nur den Status vor der Initiierung, aber nicht den der manuellen Veraenderung.
Wie greife ich auf den neuen Inhalt oder Status aus einer anderen Klasse zu?

In meinem Beispiel soll der Print-Button den Inhalt des Edits ausgeben.
Auch wenn ich diesen im GUI nachtraeglich geaendert habe.
Zur Zeit bekomme ich nur den Inhalt vor der Initiierung.

Eine Ueberlegung:
Mittels signal ".textChanged" des Edits den Inhalt mittels configparser abzuspeichern und den Inhalt der .ini
ueber den print button wieder abzufragen. Vielleicht geht das eleganter.

Ich weiß, ich keonnte den Tab und das Edit einfach in der MainKlasse erstellen. Das stellt fuer mich aber keine Loesung dar...

Vielen Dank im Voraus
VG 3cosystem

Code: Alles auswählen

#!/usr/bin/env python
# -*- encoding: utf-8 -*-

import sys
from PyQt5 import QtWidgets


class Ui_MainWindow(QtWidgets.QDialog):
    def __init__(self, master=None):
        super().__init__()
        self.setupUI()

    def setupUI(self):
        self.setWindowTitle("Printen, was im Edit steht.")
        box = QtWidgets.QVBoxLayout()

        tabWidget = QtWidgets.QTabWidget()
        self.btn_print = QtWidgets.QPushButton("print")
        self.btn_print.clicked.connect(self.print)
        tabelemente = tab()    # creating an object of tabinhalt (instance), has all the functions

        tabWidget.addTab(tabelemente, "Erster Tab")  
        self.editinhalt = tabelemente.getedittext()

        box.addWidget(tabWidget)
        box.addWidget(self.btn_print)

        self.setLayout(box)

    def print(self):
        print(self.editinhalt)


class tab(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        self.edit = QtWidgets.QLineEdit(self)
        self.edit.setText("Hallo")

    def getedittext(self):
        return self.edit.text()


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = Ui_MainWindow()
    MainWindow.show()
    sys.exit(app.exec_())

Re: Auslesen vom Editinhalt einer anderen Klasse (QT)

Verfasst: Montag 26. Oktober 2020, 09:24
von Sirius3
`editinhalt` ist falsch, denn das liefert dir ja nur den Inhalt nach der Initialisierung, also "Hallo". Du mußt schon in `print` auf tablement.getedittext zugreifen.
Klassen schreibt man sowohl in Qt-Notation als auch in Python mit großem Anfangsbuchstaben. Die setupUI-Methode ist überflüssig, weil das könnte man auch direkt in __init__ schreiben. `Ui_MainWindow` ist mehr als Ui, sollte also `MainWindow` heißen, dann muß man sich unten natürlich an die Namenskonvention halten und MainWindow main_window nennen.

Re: Auslesen vom Editinhalt einer anderen Klasse (QT)

Verfasst: Montag 26. Oktober 2020, 09:50
von 3cosystem
Sirius3 hat geschrieben: Montag 26. Oktober 2020, 09:24 `editinhalt` ist falsch, denn das liefert dir ja nur den Inhalt nach der Initialisierung, also "Hallo". Du mußt schon in `print` auf tablement.getedittext zugreifen.
Klassen schreibt man sowohl in Qt-Notation als auch in Python mit großem Anfangsbuchstaben. Die setupUI-Methode ist überflüssig, weil das könnte man auch direkt in __init__ schreiben. `Ui_MainWindow` ist mehr als Ui, sollte also `MainWindow` heißen, dann muß man sich unten natürlich an die Namenskonvention halten und MainWindow main_window nennen.
Hallo Sirius3,

danke fuer deine Antwort.
Mit der Qt-Notation hast du natuerlich recht...

Mit self.editinhalt = tabelemente.getedittext() dachte ich, waere da dann schon zugegriffen.
'print' verwendet doch dann tabelemente.getedittext().
Kannst du mir da bitte auf die Spruenge helfen, wo genau ich da ansetzen muss?
Bzw. Kann ich auf den Inhalt auch ohne return-Funktion zugreifen?
VG

Re: Auslesen vom Editinhalt einer anderen Klasse (QT)

Verfasst: Montag 26. Oktober 2020, 10:01
von sparrow
.getedittext() gibt dir den Inhalt des Textfeldes zurück. Das bindest du an self.editinhalt
Warum sollte der Inhalt von self.editinhalt sich anschließend automatisch verändern?
Um den aktualisierten Inhalt des Textfeldes zu bekommen, musst du dann, wenn du ihn dann, wenn du ihn haben willst, entsprechend wieder mit .getedittext() abrufen.

Re: Auslesen vom Editinhalt einer anderen Klasse (QT)

Verfasst: Montag 26. Oktober 2020, 10:32
von 3cosystem
sparrow hat geschrieben: Montag 26. Oktober 2020, 10:01 .getedittext() gibt dir den Inhalt des Textfeldes zurück. Das bindest du an self.editinhalt
Warum sollte der Inhalt von self.editinhalt sich anschließend automatisch verändern?
Um den aktualisierten Inhalt des Textfeldes zu bekommen, musst du dann, wenn du ihn dann, wenn du ihn haben willst, entsprechend wieder mit .getedittext() abrufen.
Danke fuer die Antwort.
Es kann sich nicht veraendern. Das stimmt.
Allerdings ist das ja mein Ausgangsproblem, dass ich nicht weiß, an welcher Stelle ich "wieder" mit .getedittext() abrufe, um den aktuellen Status zu bekommen.

Edit: Oh, vermutlich so?

Code: Alles auswählen

def print(self):
        self.editinhalt = self.tabelemente.getedittext()
        print(self.editinhalt)

Re: Auslesen vom Editinhalt einer anderen Klasse (QT)

Verfasst: Montag 26. Oktober 2020, 10:34
von Sirius3
3cosystem hat geschrieben: Montag 26. Oktober 2020, 10:32 Allerdings ist das ja mein Ausgangsproblem, dass ich nicht weiß, an welcher Stelle ich "wieder" mit .getedittext() abrufe, um den aktuellen Status zu bekommen.
Die Stelle ist doch klar: dort wo Du den aktuellen Status brauchst, also in Deiner print-Methode.