Zusatzfrage zu: Ein paar Screen Programmier Fragen von gestern

  • Ein paar Fragen an die Screen Spezialisten:




    Dieser einfache Hello world Screen lässt sich mit:


    self.progress = self.session.instantiateDialog (Progress)


    Wie kann ich diesen Screen bei Programmende wieder schließen. Sonst bleibt er einfach stehen

    und führt zu einem Segmentation fault bei Neustart des Programms


    Mit self.progress.close()

    bleibt der Bildschirminhalt stehen. In den Screens Sources steht, das dieser mit:


    print("WARNING: NEVER call Screen.doClose directly!!! You have to use Session.deleteDialog(screen)


    Nur wie get das genau?


    /Willi/

    Einmal editiert, zuletzt von willi.neu9 ()

  • Wie sieht denn der Code bei Plugin-Ende aus ?

    (also da, wo du dann das self.progress.close() ausführst)


    Und meist du wirklich self.session.open (Progress) oder die Variante mit instatiateDialog(Progress) ?

    Gruß Sven (aka Dreamy)


    DM920 mit unstable OE2.5 DP
    One mit unstable OE2.6 DP

  • Sven,


    Sorry mein cut and paste Fehler:

    Code
    self.progress = self.session.instantiateDialog(Progress)
    # öffnet den Schirm.


    Aufgefufen wird das close in einer FB Callback Exit Routine.


    Code
    self.progress.close()
    self.close() # um alles zu beenden


    und dann ist das Programm zu Ende bis auf den Progress Bildschirm, der bleibt stehen.


    /Willi/

  • Dachte ich mir schon :winking_face:


    Im __init__, wo du das initiateDialog machst, muss noch das rein:

    Code
    self.onClose.append(self.deleteProgressDialog)

    Und dann das noch in die Screen-Class als zusätzliche Function reinnehmen:

    Code
    def deleteProgressDialog(self):
        self.session.deleteDialog(self.progress)

    Das self.progress.close() im Callback muss da raus.

    Gruß Sven (aka Dreamy)


    DM920 mit unstable OE2.5 DP
    One mit unstable OE2.6 DP

  • Hallo Sven


    funktioniert - wie zu erwarten!


    Hatte bereits ein: "self.onClose.append(self.delMPTimer)".

    Wo u.a. die Timer Definitionen wieder gelöscht werden.


    Beipiel: del self.timeTimer # ich hoffe das ist OK so?


    Habs einfach:

    self.session.deleteDialog(self.progress)

    mit in die Funktion dazugepackt.


    Wie immer - Danke!


    /Willi/