Search code examples
pythonpyqt5invoiceqlineedit

PyQT5: How to pass QLineEdit string from one class to another?


I am writing an application which generates invoices. I have two windows. In the first one I am gathering data from a user (name, address etc.) by using QLineEdit. Then I want to pass this data to another class to make an invoice. How can I do it?

class FormularzFaktury(QDialog):
    def __init__(self, parent=None):
        super(FormularzFaktury, self).__init__(parent)

(...)
        nazwiskonabywcyLbl = QLabel('Imię i nazwisko/nazwa: ')
        self.nazwiskonabywcy = QLineEdit(self)
        uklad.addWidget(nazwiskonabywcyLbl, 2, 0)

(...)

    def dodajprodukty(self):
        self.DP = DodajProdukty()
        self.DP.show()

class DodajProdukty(QDialog):
    def __init__(self, parent=None):
        super(DodajProdukty, self).__init__(parent)

(...)
    def show_nazwiskonabywcy(self)
        nazwiskonabywcy=self.nazwiskonabywcy.text()
        print(nazwiskonabywcy)

How to pass self.nazwiskonabywcy.text() from the first class to the second class?


Solution

  • You can pass self.nazwiskonabywcy as a parameter to DodajProdukty and then set it to its own self.nazwiskonabywcy, so the code would look like this:

    class FormularzFaktury(QDialog):
        def __init__(self, parent=None):
            super(FormularzFaktury, self).__init__(parent)
    
            nazwiskonabywcyLbl = QLabel('Imię i nazwisko/nazwa: ')
            self.nazwiskonabywcy = QLineEdit(self)
            uklad.addWidget(nazwiskonabywcyLbl, 2, 0)
    
        def dodajprodukty(self):
            self.DP = DodajProdukty(self.nazwiskonabywcy)
            self.DP.show()
    
    class DodajProdukty(QDialog):
        def __init__(self, nazwiskonabywcy, parent=None):
            super(DodajProdukty, self).__init__(parent)
            self.nazwiskonabywcy = nazwiskonabywcy
    
        def show_nazwiskonabywcy(self)
            nazwiskonabywcy=self.nazwiskonabywcy.text()
            print(nazwiskonabywcy)
    

    Or if self.nazwiskonabywcy is already set to the correct text at the point where DodajProdukty is instantiated, you can just pass the value directly to the new class, instead of passing the whole QLineEdit:

    class FormularzFaktury(QDialog):
        def __init__(self, parent=None):
            super(FormularzFaktury, self).__init__(parent)
    
            nazwiskonabywcyLbl = QLabel('Imię i nazwisko/nazwa: ')
            self.nazwiskonabywcy = QLineEdit(self)
            uklad.addWidget(nazwiskonabywcyLbl, 2, 0)
    
        def dodajprodukty(self):
            self.DP = DodajProdukty(self.nazwiskonabywcy.text())
            self.DP.show()
    
    class DodajProdukty(QDialog):
        def __init__(self, nazwiskonabywcy, parent=None):
            super(DodajProdukty, self).__init__(parent)
            self.nazwiskonabywcy = nazwiskonabywcy
    
        def show_nazwiskonabywcy(self)
            print(self.nazwiskonabywcy)