You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Maestro内置Python Shell调用轨迹帧切换方法报错求助

解决Maestro中模拟点击“下一轨迹帧”按钮的报错问题

问题原因

你直接通过类名调用TrajectoryPlayer.takeTrajectoryStep(),但takeTrajectoryStep是实例方法:

  • 必须通过TrajectoryPlayer的实例调用,而非类本身调用(否则会缺少self参数)
  • 该方法还需要传入当前帧curr_frame参数,你没有提供导致报错

正确解决方案

Maestro加载轨迹后,界面中已经存在TrajectoryPlayer实例,我们只需要找到这个实例,调用它的onNextButtonClicked()方法(这是“下一帧”按钮的点击回调,内部已经处理了帧切换的逻辑):

from schrodinger.trajectory.trajectory_gui_dir.playertoolbar import TrajectoryPlayer
from schrodinger.ui.qt.appframework.app import get_app

# 获取当前Maestro应用实例
app = get_app()
trajectory_player = None

# 遍历所有界面组件,找到轨迹播放器实例
for widget in app.allWidgets():
    if isinstance(widget, TrajectoryPlayer):
        trajectory_player = widget
        break

if trajectory_player:
    # 模拟点击“下一轨迹帧”按钮
    trajectory_player.onNextButtonClicked()
else:
    print("错误:未找到轨迹播放器,请先在Maestro中加载Desmond轨迹文件")

循环切换轨迹帧

如果需要循环执行切换操作,直接添加循环结构即可,比如循环切换20次:

from schrodinger.trajectory.trajectory_gui_dir.playertoolbar import TrajectoryPlayer
from schrodinger.ui.qt.appframework.app import get_app
import time

app = get_app()
trajectory_player = None
for widget in app.allWidgets():
    if isinstance(widget, TrajectoryPlayer):
        trajectory_player = widget
        break

if trajectory_player:
    # 循环切换20次,每次间隔0.5秒(可根据需求调整)
    for _ in range(20):
        trajectory_player.onNextButtonClicked()
        time.sleep(0.5)
else:
    print("错误:未找到轨迹播放器,请先加载轨迹文件")

额外说明

  • onNextButtonClicked()是Maestro轨迹播放器“下一帧”按钮的原生回调方法,和手动点击按钮效果完全一致
  • 如果一定要用takeTrajectoryStep(),需要先获取当前帧再调用:
    if trajectory_player:
        curr_frame = trajectory_player.getCurrentFrame()
        trajectory_player.takeTrajectoryStep(curr_frame)
    

内容的提问来源于stack exchange,提问作者THolmes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 03:46:05