Wie kann ich einige Bildeditoroptionen mit Python ändern?

Nov 07 2020

Angenommen, meine Benutzeroberfläche sieht folgendermaßen aus:

Was ich tun möchte , ist , einige Änderungen Image Editor bpy.context.window_manager.windows[0].screen.areas[1] Optionen durch meine Addon. Um beispielsweise das Bild des Bildeditors zu ändern, gehe ich folgendermaßen vor:

texture_name = "face.png"

area = bpy.context.window_manager.windows[0].screen.areas[1]
area.spaces.active.image = bpy.data.images[texture_name]

Wenn ich etwas ändern möchte, sagen wir den Header des Bildeditors. Ob es erscheint oder nicht. Oder das Zoomverhältnis des Bildes. Wie mache ich das?

Ich habe dies bpy.context.space_data.show_region_header = Falseund das bpy.ops.image.view_zoom_ratio(ratio=1.0)mit einem Rechtsklick gefunden, weiß aber nicht, wie ich es verwenden soll. Wenn ich beispielsweise bpy.context.space_data.show_region_header = Falsevon meinem Addon aus verwende, wird der Header des Bildeditors nicht ausgeblendet, sondern der Header des 3D-Ansichtsfensters.

Ich versuche auch, durch Bereiche zu iterieren bpy.context.space_data.show_region_header = Falseund bpy.ops.image.view_zoom_ratio(ratio=1.0)von dort aus zu tun . Aber ich kann die Syntax nicht finden. Denn zum Beispiel bpy.ops.image.view_zoom_ratio(ratio=1.0)sollte so etwas sein area.spaces.view_zoom_ratio(ratio=1.0). Was nicht funktioniert und mir diesen Fehler gibtAttributeError: 'bpy_prop_collection' object has no attribute 'view_zoom_ratio'

Irgendeine Idee, wie ich das machen kann?

Antworten

2 tetii Nov 08 2020 at 06:47

Suchen Sie Bildansichten aus screen.areas mit Filterung und rufen Sie den Operator view_zoom_ratio mit Overriding Context auf .

import bpy

override = bpy.context.copy()

for area in bpy.context.screen.areas:

    #if area.type != 'IMAGE_EDITOR' or area.ui_type != 'VIEW': # Image Editor View only
    #if area.type != 'IMAGE_EDITOR' or area.ui_type != 'UV': # UV Editor View only
    if area.type != 'IMAGE_EDITOR':
        continue

    area.spaces.active.show_region_header = False

    override['area'] = area
    bpy.ops.image.view_zoom_ratio(override, ratio=1.0)

    area.tag_redraw()