Blender VSE Python Operator bpy.ops.transform.seq_slide.poll() failed, context is incorrect エラーに対応

VideoSequenceEditor

48フレーム移動させるために下記のコードを実行したらエラーとなった

はじめに

実行したコード

import bpy
bpy.ops.transform.seq_slide(value=(48, 0))Code language: JavaScript (javascript)

出てきたエラー

RuntimeError: Operator bpy.ops.transform.seq_slide.poll() failed, context is incorrect

このエラー自体 Blenderで Script 使っている人からすればあるあるなのかもしれない。

しかし私はハマってしまったので色々調べた結果です

調べた内容

文化ヒナゲシ制作所雑記帳 BlenderPythonScript

上記を確認すると、context をオーバーライドすると正常に動く場合があるとのこと。

そのコード

import bpy

for area in bpy.context.screen.areas:
    if area.type == 'TIMELINE':
        context = bpy.context.copy()
        context['area'] = area
        for rgn in area.regions:
            if rgn.type == 'WINDOW':
                context['region'] = rgn
                break
        
        bpy.ops.time.view_all(context)Code language: JavaScript (javascript)

しかしコードを見る限り TIMELINE とか書いてあるし、動きそうにない。

念の為、試してみてもやはり同じエラーとなった。

自分がやりたいのは Video Sequence Editor である。

しかしVideo Sequence Editor の名前がわからない。という事で検索。

【Blender 2.8 アドオン開発】003 Blender 内のデータにアクセスしよう(Context と データ構造 と レイアウト) – めもてう

こちらを読み。なんとなく理解ができた。どうやら私がやろうとしているコードは Video Sequence Editor が受け付けているコマンドで
それを Text Editor 上で実行しようとしているからエラーになっているようだ。

※認識に誤りがあったら教えて下さいm( )m

上記のページにあった下記コードを実行して、Video Sequence Editor の名前を調べる

import bpy

window = bpy.context.window
workspace = window.workspace

print(workspace.name + " : Workspace")
for screen in workspace.screens:
  print("  " + screen.name + " : Screen")
  for area in screen.areas:
    print("    " + area.type + " : Area")
    for region in area.regions:
      print("      " + region.type + " : Region")Code language: PHP (php)

結果

SEQUENCE_EDITOR だったので最初のコードと組み合わせる。

import bpy

for area in bpy.context.screen.areas:
    if area.type == 'SEQUENCE_EDITOR':
        context = bpy.context.copy()
        context['area'] = area
        for rgn in area.regions:
            if rgn.type == 'WINDOW':
                context['region'] = rgn
                break
        bpy.ops.transform.seq_slide(context, value=(48, 0))Code language: JavaScript (javascript)

最後に実行している seq_slide の第一引数が増えている点に注意が必要

動いてくれました。

タイトルとURLをコピーしました