'tuple' object is not callable

  • Hallo Experten,

    habt Ihr eine Idee, was hier schief läuft:



    Der Code steigt mit der camera.zoom(...)-Anweisung und der Meldung 'tuple' object is not callable aus. Wenn ich statt der eingefügten Variablen konkrete Zahlen als Argumente in die Klammer setze:  camera.zoom(0.25, 0.25, 0.5, 0.5) funktioniert es. :conf:


    Die picamera-API sagt zur zoom-Anweisung:


    "Retrieves or sets the zoom applied to the camera’s input.

    When queried, the zoom property returns a (x, y, w, h) tuple of floating point values ranging from 0.0 to 1.0, indicating the proportion of the image to include in the output (this is also known as the “Region of Interest” or ROI). The default value is (0.0, 0.0, 1.0, 1.0)which indicates that everything should be included. The property can be set while recordings or previews are in progress."

  • Code
    Traceback (most recent call last):
    File "/home/pi/scripts/kamera.py", line 12, in <module>
    camera.zoom(border,border,fraction,fraction)
    TypeError: 'tuple' object is not callable
  • Code
    camera.zoom(0.25, 0.25, 0.5, 0.5)

    funktioniert es auch noch wenn du hier die Leerzeichen weglässt?

    Der Unterschied zwischen Genie und Wahnsinn definiert sich im Erfolg.

  • Jat denn mal jemand fünf Sekunden in die Doku geschaut? :-/


    camera.zoom ist ein Attribut, was ausgelesen werden kann (vermutlich mit @property realisiert, eine Art Getter und Setter, nur nicht als Methode). Zurückgegeben wird ein Tuple, der kann natürlich nicht aufgerufen werden, was allerdings hiermit versucht wird:

    camera.zoom(border,border,fraction,fraction)

    entspricht:

    Python
    (1, 2, 3, 4)(border,border,fraction,fraction)

    Was natürlich nicht geht:

    Python
    >>> (1, 2, 3, 4)(1, 2, 3, 4)
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    TypeError: 'tuple' object is not callable
    >>>


    Wenn ich statt der eingefügten Variablen konkrete Zahlen als Argumente in die Klammer setze: camera.zoom(0.25, 0.25, 0.5, 0.5) funktioniert es.

    Das kann ich mir nicht vorstellen, das ist nämlich das gleiche wie

    camera.zoom(border,border,fraction,fraction)

    The property can be set

    camera.zoom = (x, y, w, h) sollte demnach richtig sein, ob das nun ein Tuple aus vier Zahlen direkt oder mir Variablen ist spielt keine Rolle.


    SIehe auch https://stackoverflow.com/ques…e-property-decorator-work. Oder speziell https://diyprojects.io/picamer…erry-pi-camera-in-python/, "Zoom replaces crop".

    funktioniert es auch noch wenn du hier die Leerzeichen weglässt?

    Whyyyyyy?


    Whitespace spielt an vielen Stellen keine Rolle, bei den Einrückungen natürlich schon. Kannste selbst ausprobieren:


  • Hey linusg,

    du hast in allem recht! :thumbup::thumbup::thumbup:

    Ein dilettantischer Syntaxfehler. Hatte es zunächst bei Verwendung der konkreten Werte richtig gemacht und nicht bemerkt, dass ich anschließend das "=" verschluckt habe. Danke, dass Ihr euch alle Gedanken gemacht habt. Und Tschuldigung für meine Dämlichkeit. :blush: