Label im hauptfenster ändern.

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
Sven1987h
User
Beiträge: 15
Registriert: Freitag 1. April 2011, 13:40

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
Zuletzt geändert von Sven1987h am Dienstag 4. Februar 2020, 21:45, insgesamt 2-mal geändert.
Benutzeravatar
JakobDev
User
Beiträge: 63
Registriert: Mittwoch 17. Juli 2019, 17:20

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.
Benutzeravatar
sparrow
User
Beiträge: 4193
Registriert: Freitag 17. April 2009, 10:28

Ohne jetzt im Detail einzusteigen: du versucht das Label in der Klasse zu ändern, nicht in der Instanz einer Klasse.
Sven1987h
User
Beiträge: 15
Registriert: Freitag 1. April 2011, 13:40

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 ;)
Sven1987h
User
Beiträge: 15
Registriert: Freitag 1. April 2011, 13:40

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 :)
Benutzeravatar
JakobDev
User
Beiträge: 63
Registriert: Mittwoch 17. Juli 2019, 17:20

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_())
Benutzeravatar
__blackjack__
User
Beiträge: 13103
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@JakobDev: Das mit `parent` ist keine gute Idee denn damit überschreibst/verdeckst Du die `parent()`-Methode von `QObject`.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten