Seite 1 von 1

Label im hauptfenster ändern.

Verfasst: Dienstag 4. Februar 2020, 21:19
von Sven1987h
Moin moin,

ich stehe sein wenig auf dem schlauch.
Ich versuche jetzt seit Stunden ein Label im Hauptfenster meiner anwendung zu ändern.
Leider bekomme ich keine Fehlermeldung sondern das Programm stürzt einfach ab.
Warscheinlich verstehe ich OOP noch nicht so ganz und komme deswegen gerade nicht weiter, aber wenn mir jemand aufzeigen mag was
ich falsch mache komme ich schon ein großes stück weiter.
in der Funktion test versuche ich ein laber aus der Classe Example zu ändern, aber wie gesagt sobald ich auf den Button klicke stürzt das Programm ohne eine Fehlemeldung in der IDE ab.
Was mache ich Falsch?

Code: Alles auswählen

import sys
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtGui import QIcon
from PyQt5 import uic
from PyQt5 import QtCore

#load both ui file
uifile_1 = 'main.ui'
form_1, base_1 = uic.loadUiType(uifile_1)

uifile_2 = 'login.ui'
form_2, base_2 = uic.loadUiType(uifile_2)

uifile_3 = 'com.ui'
form_3, base_3 = uic.loadUiType(uifile_3)

class Example(base_1, form_1):
    def __init__(self):
        super(base_1,self).__init__()
        self.setupUi(self)
        self.btn_101.clicked.connect(self.change)
        self.btn_102.clicked.connect(self.change2)

    def change(self):
        self.main = MainPage()
        self.main.show()
        #self.close()

    def change2(self):
        self.main = MainPage2()
        self.main.show()
        #self.close()



class MainPage(base_2, form_2):
    def __init__(self):
        super(base_2, self).__init__()
        self.setupUi(self)

class MainPage2(base_3, form_3):
    def __init__(self):
        super(base_3, self).__init__()
        self.setupUi(self)
        self.btn_ok.clicked.connect(self.test)
    def test(self):
        Example.l_username.setText("hola")

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    ex.show()
    sys.exit(app.exec_())


Danke euch

Re: Label im hauptfenster ändern.

Verfasst: Dienstag 4. Februar 2020, 21:41
von JakobDev
Das ein Python Programm ohne Fehlermeldung abstürzt, sollte eigentlich nicht passieren, sofern der Fehler im Python Code liegt und nicht in einer benutzten Lib, die z.B. in C Programmiert wurde.Versuch mal, dein Programm ohne IDE zu starten. Du könntest auch mal die ui Dateien posten, damit man den Fehler eventuell reproduzieren kann.

Re: Label im hauptfenster ändern.

Verfasst: Dienstag 4. Februar 2020, 21:44
von sparrow
Ohne jetzt im Detail einzusteigen: du versucht das Label in der Klasse zu ändern, nicht in der Instanz einer Klasse.

Re: Label im hauptfenster ändern.

Verfasst: Dienstag 4. Februar 2020, 21:51
von Sven1987h
JakobDev hat geschrieben: Dienstag 4. Februar 2020, 21:41 Das ein Python Programm ohne Fehlermeldung abstürzt, sollte eigentlich nicht passieren, sofern der Fehler im Python Code liegt und nicht in einer benutzten Lib, die z.B. in C Programmiert wurde.Versuch mal, dein Programm ohne IDE zu starten. Du könntest auch mal die ui Dateien posten, damit man den Fehler eventuell reproduzieren kann.
Danke das war schonmal nicht schlecht jetzt bekomme ich auch eine Fehlermeldung in der CMD ;)

Re: Label im hauptfenster ändern.

Verfasst: Dienstag 4. Februar 2020, 21:52
von Sven1987h
sparrow hat geschrieben: Dienstag 4. Februar 2020, 21:44 Ohne jetzt im Detail einzusteigen: du versucht das Label in der Klasse zu ändern, nicht in der Instanz einer Klasse.
Und eine richtige instanz vom hauptfenster gibt es nicht oder?
Wie gesagt ich bin noch nicht so weit was OOP a geht :)

Re: Label im hauptfenster ändern.

Verfasst: Mittwoch 5. Februar 2020, 14:31
von JakobDev
Hier mal ein kleiner Beispielcode:

Code: Alles auswählen

class Beispiel():
    var = 1

test = Beispiel()
Beispiel ist hier die Klasse und test eine Instanz der Klasse Beispiel.

Bezogen auf deinen Code oben, würde das so aussehen: (ungetestet)

Code: Alles auswählen

import sys
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtGui import QIcon
from PyQt5 import uic
from PyQt5 import QtCore

#load both ui file
uifile_1 = 'main.ui'
form_1, base_1 = uic.loadUiType(uifile_1)

uifile_2 = 'login.ui'
form_2, base_2 = uic.loadUiType(uifile_2)

uifile_3 = 'com.ui'
form_3, base_3 = uic.loadUiType(uifile_3)

class Example(base_1, form_1):
    def __init__(self):
        super(base_1,self).__init__()
        self.setupUi(self)
        self.btn_101.clicked.connect(self.change)
        self.btn_102.clicked.connect(self.change2)

    def change(self):
        self.main = MainPage()
        self.main.show()
        #self.close()

    def change2(self):
        self.main = MainPage2(self)
        self.main.show()
        #self.close()



class MainPage(base_2, form_2):
    def __init__(self):
        super(base_2, self).__init__()
        self.setupUi(self)

class MainPage2(base_3, form_3):
    def __init__(self, parent):
        super(base_3, self).__init__()
        self.setupUi(self)
        self.parent = parent
        self.btn_ok.clicked.connect(self.test)

    def test(self):
        self.parent.l_username.setText("hola")

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    ex.show()
    sys.exit(app.exec_())

Re: Label im hauptfenster ändern.

Verfasst: Mittwoch 5. Februar 2020, 15:23
von __blackjack__
@JakobDev: Das mit `parent` ist keine gute Idee denn damit überschreibst/verdeckst Du die `parent()`-Methode von `QObject`.