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

Blender Python脚本问题:自定义面板按钮整数递增功能失效

解决Blender自定义面板按钮的数值递增问题

看起来你已经搭好了自定义面板的基础框架,问题核心在于计数器状态无法持久化——如果只是用局部变量,每次点击按钮时函数都会重新执行,数值会被重置为初始值,自然没法实现递增效果。咱们把计数器绑定到Blender的场景属性上,就能让数值在会话中保持状态了。

下面是修改后的完整可运行代码:

import bpy
from bpy.props import IntProperty
from bpy.types import Panel, Operator

# 注册计数器属性到场景,这样数值会被Blender持久化保存
bpy.types.Scene.counter = IntProperty(
    name="Counter",
    description="Incrementing counter",
    default=0,
    min=0
)

# 定义按钮对应的操作类
class IncrementCounterOperator(Operator):
    bl_idname = "object.increment_counter"
    bl_label = "Increment & Print"
    
    def execute(self, context):
        # 获取当前场景的计数器属性
        scene = context.scene
        # 打印当前数值
        print(scene.counter)
        # 递增数值
        scene.counter += 1
        return {'FINISHED'}

# 定义自定义面板
class CUSTOM_PT_Panel(Panel):
    bl_label = "Custom Counter Panel"
    bl_idname = "CUSTOM_PT_panel"
    bl_space_type = 'VIEW_3D'
    bl_region_type = 'UI'
    bl_category = "Custom"  # 侧边栏的标签页名称
    
    def draw(self, context):
        layout = self.layout
        scene = context.scene
        
        # 可选:显示当前计数器数值,方便直观查看
        layout.prop(scene, "counter")
        # 添加触发递增的按钮
        layout.operator("object.increment_counter")

# 注册和注销函数
def register():
    bpy.utils.register_class(IncrementCounterOperator)
    bpy.utils.register_class(CUSTOM_PT_Panel)

def unregister():
    bpy.utils.unregister_class(IncrementCounterOperator)
    bpy.utils.unregister_class(CUSTOM_PT_Panel)
    # 注销时记得移除属性,避免残留
    del bpy.types.Scene.counter

if __name__ == "__main__":
    register()

关键修改点说明:

  1. 持久化属性绑定:
    我们把IntProperty注册到bpy.types.Scene上,这样计数器数值会和当前场景绑定,在Blender会话中一直保留(直到你重置场景或者手动修改数值)。

  2. 操作函数逻辑:
    在按钮的execute方法中,我们直接访问context.scene.counter——这是Blender保存的全局状态,每次点击都会读取当前值、打印、然后递增,不会被重置。

  3. 面板优化(可选):
    我在面板里加了layout.prop(scene, "counter"),这样你能直接在面板上看到当前计数器的数值,不用每次去控制台看,当然如果不需要可以删掉这一行。

使用方法:

  1. 打开Blender的脚本编辑器,粘贴上面的代码
  2. 点击"运行脚本"
  3. 切换到3D视图,打开侧边栏(按N键),找到"Custom"标签页
  4. 点击"Increment & Print"按钮,每次点击控制台都会打印递增后的数值,面板上的数值也会同步更新

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:22:48