Ich möchte auch ein paar Bilder ausgeben

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo Forum,
    nach dem ich ein einzelnes Bild von Rpi auf dem Tv ausgeben kann möchte ich nun mehrere Bilder nacheinander anzeigen. Hierzu habe ich in einem Verzeichnis 30 Bilder liegen ( Bild1.png, Bild2.png usw ) Diese würde ich gern nacheinander an den TV senden. Hierzu habe ich global ein Verzeichnis definiert:
    [code]
    def main(session):
    session.open(PictureScreen, picPath = "/home/pi/Bilder/clippy/")
    [code/]

    Ok danach möchte ich Bilder laden bearbeiten und ausgeben. Woran ich nun scheitere ist das Laden der Bilder:

    [code]
    ......
    def __init__(self, session, picPath = None):
    Screen.__init__(self, session)
    print "[PictureScreen] __init__\n"
    self.picPath = picPath(matchingPattern = "(?i)^.*\.(png)")
    self["picPath"] = self.picPath
    self["picPath"].onSelectionChanged.append(self.selectionChanged)

    # self.ThumbTimer = eTimer()
    # self.ThumbTimer.callback.append(self.showThumb)
    self.Scale = AVSwitch().getFramebufferScale()
    self.PicLoad = ePicLoad()
    self["myPic"] = Pixmap()
    self["myActionMap"] = ActionMap(["SetupActions"],
    self.PicLoad.PictureData.get().append(self.DecodePicture)
    self.onLayoutFinish.append(self.ShowPicture1)
    .....
    [code/]

    Der Teil "self.picPath" läuft in einen Fehler :
    "TypeError: 'str' object is not callable"

    Was mache ich falsch ?

    Gruß

    Frank

  • Hallo,

    die Fehlermeldung spricht doch quasi Klartext: du versucht einen String wie eine Funktion aufzurufen - kann also nicht funktionieren :)

    Python
    def __init__(self, session, picPath = None):
    ...
    self.picPath = picPath(matchingPattern = "(?i)^.*\.(png)")

    `picPath` soll wohl der Pfad zu den Bildern sein. Wird der Funktion dann wohl als String übergeben.

    Dann kann ` picPath(matchingPattern = "(?i)^.*\.(png)")` nicht funktionieren, weil `picPath` so ein Funktionsaufruf ist (zu erkennen an den folgenden Klammern).

    In gezeigten Fall rufst du die Funktion `picPath()` mit dem Parameter `matchingPattern = "(?i)^.*\.(png)"` auf.

    Gruß, noisefloor

  • Hallo,
    ja klar ist völlig richtig ....... wobei ich glaube, dass ich einen anderen Weg gehen muss. Ich bin bisher davon ausgegangen das ich meine Bilder auf einmal laden kann, wenn ich sie aber nacheinander ausgeben will geht das wohl nicht.

    Ich Frage mal anders, was mir hierzu einfällt wäre eine list die ich mit index abarbeite. Aber geht denn das überhaupt ? ........ geht sicher aber ich weiß nicht. Also eine Liste erstellen mit Werten ist bekannt aber mit Bildern/Dateien ? Und mit welchem index arbeite ich dann ? Bei einem Wert habe ich eben einen Wert als Ausgabe. Das Bild müsste ich erst noch mit picmax usw bearbeiten.
    Vielleicht hätte jemand ein Beispiel oder einen Link wo ich das nachlesen kann ?

    Gruß
    Frank

    Einmal editiert, zuletzt von firstfacility (11. August 2015 um 18:45)

  • Hallo,

    Zitat

    Ich bin bisher davon ausgegangen das ich meine Bilder auf einmal laden kann, wenn ich sie aber nacheinander ausgeben will geht das wohl nicht.


    Doch geht schon. Du kannst quasi beliebig viele Dateien öffnen, hast dann für jede aber ein eigenes File-Object, was bei vielen Dateien umständlich wird.

    Python hat dafür aber zwei Lösungen:

    1. das glob-Modul. Das erzeugt dir eine Liste von Dateien, über die du iterieren kannst.
    2. os.walk. Damit kannst du rekursive einen Verzeichnisbaum durchlaufen und über die Dateien darin iterieren.

    Wenn alle Bilder für deine "Dia-Show" in einem Verzeichnis liegen, dann ist `glob` IMHO der einfachere und bessere Weg.

    Gruß, noisefloor

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!