Wie kann ich einige Bildeditoroptionen mit Python ändern?
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
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()