Comment puis-je modifier certaines options de l'éditeur d'image en utilisant python?

Nov 07 2020

Disons que mon interface utilisateur ressemble à ceci:

Ce que je veux faire, c'est modifier certaines options de l' éditeur d'images bpy.context.window_manager.windows[0].screen.areas[1] via mon addon. Par exemple, pour changer l'image de l'éditeur d'images, je fais quelque chose comme ceci:

texture_name = "face.png"

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

Au cas où je voudrais changer, disons l'en-tête de l'éditeur d'image. S'il apparaîtra ou non. Ou le rapport de zoom de l'image. Comment vais-je faire ça?

J'ai trouvé ceci bpy.context.space_data.show_region_header = Falseet cela en bpy.ops.image.view_zoom_ratio(ratio=1.0)utilisant le clic droit, mais je ne sais pas comment l'utiliser. Parce que par exemple, si j'utilise bpy.context.space_data.show_region_header = Falsedepuis mon addon, il ne masquera pas l'en-tête de l'éditeur d'image mais l'en-tête de 3D Viewport.

J'essaie également de parcourir les zones et de faire bpy.context.space_data.show_region_header = Falseet à bpy.ops.image.view_zoom_ratio(ratio=1.0)partir de là. Mais je ne trouve pas la syntaxe. Parce que par exemple, bpy.ops.image.view_zoom_ratio(ratio=1.0)devrait être quelque chose comme area.spaces.view_zoom_ratio(ratio=1.0). Ce qui ne fonctionne pas et me donne cette erreurAttributeError: 'bpy_prop_collection' object has no attribute 'view_zoom_ratio'

Alors, une idée comment puis-je faire cela?

Réponses

2 tetii Nov 08 2020 at 06:47

Recherchez les vues de l'éditeur d'images à partir de screen.areas avec filtrage et appelez l'opérateur view_zoom_ratio avec Contexte de remplacement .

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()