Textlabel ändert sich nicht

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
DL3AD
User
Beiträge: 27
Registriert: Montag 31. August 2015, 19:03

Donnerstag 13. Februar 2020, 14:34

ich möchte nix auf dem Silbertablett haben!
Oben habe ich ein einfaches Beispiel
Wenn dort auf einen Btn geklickt wird soll beispielhaft eine selbst definierte Funktion aufgerufen werden und als Reaktion der Funktion ein Label beschrieben werden.
Meine bitte ist lediglich dieses Beispiel zu ändern dass es funktioniert.
Dass hilft mir dann weiter - ich habe schon stundenlang rumgelesen und probiert.
Ich lerne am besten an selbst gebauten Beispielen.
Also wer ist so nett und hilft mir ?
__deets__
User
Beiträge: 7710
Registriert: Mittwoch 14. Oktober 2015, 14:29

Donnerstag 13. Februar 2020, 14:39

"Ich will nix auf dem Silbertablett haben" und "Meine bitte ist lediglich dieses Beispiel zu ändern dass es funktioniert." sind ein Widerspruch. Denn das *ist* die Loesung auf dem Silbertablett. Und am besten zu lernen, wenn man etwas fertig vorgesetzt bekommt, ist wohl auch nicht so ganz wahr. Da hast du dann deutlich weniger gelernt, als dir die allgemeinen Konzepte der Objektorientierung, die an allen moeglichen Ecken und Enden anzuwenden sind, zu erarbeiten.
DL3AD
User
Beiträge: 27
Registriert: Montag 31. August 2015, 19:03

Donnerstag 13. Februar 2020, 14:52

Warum willst du mir vorschreiben wie ich etws zu lernen habe ? jeder Mensch ist da anders.
Warum hilfst du mir nicht auf die Art um die ich gebeten hatte ?
Wir haben nun 18 Beiträge auf diesem Faden dass muss doch nich sein.

Also noch mal, ist jemand so nett und hilft mir ?
__deets__
User
Beiträge: 7710
Registriert: Mittwoch 14. Oktober 2015, 14:29

Donnerstag 13. Februar 2020, 14:57

Warum willst du mir vorschreiben, wie ich zu helfen habe? Jeder Mensch ist da anders.
Warum nimmst du die Hilfe nicht an, die dir angeboten wurde?
Wir haben nun 18 Beitraege auf diesem Faden, das muss doch nicht sein.

Also noch mal, bist du so nett und probierst mal zu verstehen, was dir hier gezeigt (Code-Beispiele inklusive) wurde?
DL3AD
User
Beiträge: 27
Registriert: Montag 31. August 2015, 19:03

Donnerstag 13. Februar 2020, 15:08

Ich habe herumprobier noch und nöcher ich bekomme es nicht hin !
Wer ist so nett und bringt mir das im Eingangspost stehende Beispiel ans laufen ?
Benutzeravatar
__blackjack__
User
Beiträge: 5545
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Donnerstag 13. Februar 2020, 15:19

@DL3AD: Es will Dir keiner Vorschreiben wie Du zu lernen hast. Du musst den Rat ja nicht annehmen. Du kannst auch stundenlang rumlesen und probieren, was eigentlich „Lernen“ ist wenn es richtig macht, weil dann Erkenntnisgewinn dabei abfällt. Wenn man es falsch macht kann man auch so lange herum betteln bis eine Lösung auf Silbertablett serviert wird. Da hat dann aber irgendwann niemand mehr Bock drauf Deine Probleme zu lösen wenn von Dir Null Eigenleistung kommt und Du offensichtlich gar nichts lernen und verstehen willst. Du willst schnelle Erfolge ohne selbst etwas substantielles dazu zu tun oder zu lernen.

Mich würde nicht wundern wenn Du bei Pascal/Delphi nur die Lücken in den Vorlagen ausgefüllt hast die Dir die IDE vorgesetzt hat, ohne tatsächlich zu verstehen was da passiert. Denn sonst hättest Du ja bereits ein belastbares Verständnis von Objektorientierung und könntest beim durcharbeiten des Python-Tutorials auf vorhandenes Grundwissen zurückgreifen und sehen wo sich die beiden Objektmodelle der Sprachen unterscheiden und was gleich ist. Zum Beispiel der Unterschied zwischen Methode und Funktion/Prozedur besteht ja in beiden Sprachen. Also sollte eine Antwort wie „Die Funktion sollte keine freistehende Funktion sein sondern muss eine Methode in der Klasse sein“ eigentlich ziemlich klar und eindeutig sein.

Programmieren durch herumprobieren noch und nöcher funktioniert nicht. Wir legen Dir Nahe tatsächlich Programmieren zu lernen. Dazu muss man verstehen was man da macht. Probieren kann auch Bestandteil davon sein, aber nicht einfach wild, sondern systematisch, in dem man sich anschaut was man da hat, sich überlegt was man machen muss um das zu bekommen was man möchte, und wenn das nicht funktioniert, auch schaut was man denn stattdessen bekommen hat und wie das vom gewünschten abweicht. Nur so kann man dem Fehler in den eigenen Gedanken/Vorstellungen auf die Spur kommen und sein gedankliches Modell an die Wirklichkeit anpassen um auf der Grundlage die richtigen Schlüsse zu ziehen.

*Du* musst Objektorientierung verstehen. Das kann niemand für Dich übernehmen, das musst Du Dir selbst erarbeiten. Es wurde bereits auf das Tutorial in der Python-Dokumentation verwiesen. Da wird das erklärt. Wenn Du das durchgearbeitet und verstanden hast, ist es auch trivial den Code im ersten Beitrag zum laufen zu bringen. Wenn Du das nicht verstanden hast wird es nicht lange dauern und Du bettelst hier nach dem nächsten Beispiel das Du selber schreiben könntest wenn Du es verstanden hättest.
long long ago; /* in a galaxy far far away */
DL3AD
User
Beiträge: 27
Registriert: Montag 31. August 2015, 19:03

Donnerstag 13. Februar 2020, 16:22

Hallo,

nun habe ich eine funktionierende Version

Code: Alles auswählen

import sys
from PyQt5 import QtWidgets
import form1

class MainWindow(QtWidgets.QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.ui = form1.Ui_MainWindow()
        self.ui.setupUi(self)
        self.ui.Btn_Calc.clicked.connect(self.my_hallo)
        
    def my_hallo(self):
        self.ui.Lbl_Erg.setText('Hallo')
       
def main():
    app = QtWidgets.QApplication(sys.argv)
    my_form1 = MainWindow()
    my_form1.show()
    sys.exit(app.exec_())

if __name__ == "__main__":
    main()
ui ist ja die Instanz der GUI
mit ui.Btn_Calc.clicked.connect(self.my_hallo) erreiche ich das Objekt Btn_Calc und die Methode Clicked und verbinde dann mit der funktion my_hallo

in my_hallo erreiche ich dann mit ui.Lbl_erg das Objekt Label und ändere die Eigenschaft Text

Ist das soweit richtig ?
__deets__
User
Beiträge: 7710
Registriert: Mittwoch 14. Oktober 2015, 14:29

Donnerstag 13. Februar 2020, 16:29

Wenn es funktioniert - ja. Denn damit ist der callback nun eine “bound method”, und kann auf den Zustand (also auch andere Objekte) zugreifen.
DL3AD
User
Beiträge: 27
Registriert: Montag 31. August 2015, 19:03

Donnerstag 13. Februar 2020, 16:35

...ja es funktioniert. 8)

Wie würde denn die variante mit callback aussehen ?
__deets__
User
Beiträge: 7710
Registriert: Mittwoch 14. Oktober 2015, 14:29

Donnerstag 13. Februar 2020, 16:54

Du hast einen callback. In Qt-Lingo ist das ein slot, den man mit connect mit dem signal verbindet, aber abstrakt ist das auch nix anderes - eben eine zurueck-gerufene Funktion.
Antworten