搅拌机python递增一个整数

搅拌机python递增一个整数,python,integer,increment,blender,Python,Integer,Increment,Blender,我很确定这个问题已经得到了回答,但我似乎找不到答案。 我想要的是一个用于Blender的python脚本,它创建一个包含按钮的自定义选项卡。当按下该按钮时,它会打印一个整数的值并将其递增,因此当您再次按下该按钮时,它会显示一个递增的值。除了增量部分之外,一切似乎都正常 以下是我目前使用的代码: === === 但是,当我按下“增量1”按钮时,我得到以下错误: “赋值前引用的局部变量‘my_number’” 本练习的重点是创建一个整数变量,存储它,然后增加它的值并打印出来 编辑:我添加了实际的代码

我很确定这个问题已经得到了回答,但我似乎找不到答案。 我想要的是一个用于Blender的python脚本,它创建一个包含按钮的自定义选项卡。当按下该按钮时,它会打印一个整数的值并将其递增,因此当您再次按下该按钮时,它会显示一个递增的值。除了增量部分之外,一切似乎都正常

以下是我目前使用的代码:

=== === 但是,当我按下“增量1”按钮时,我得到以下错误:

“赋值前引用的局部变量‘my_number’”

本练习的重点是创建一个整数变量,存储它,然后增加它的值并打印出来


编辑:我添加了实际的代码,而不是它的图像。

通常,当您在代码中有'my_number'变量,并且您没有在代码顶部初始化该变量或在使用该变量之前执行一件事时,就会出现此问题


声明
my_number=0
,然后对my_number变量进行计算。

变量
my_number
在类
MySettings
中定义-它只能通过该类访问,无论该类是否在也是该类一部分的方法中(
self.my_number
)或者直接作为类实例的一部分的属性(
settings\u instance.my\u number

您需要在操作符和面板之外找到一个位置来存储持久变量。向或类型添加是常见的选项。在节点编辑器中显示面板时,可能需要将其添加到中,以使其特定于材质,而不是全局于场景。您可以在插件
register()
中定义这些属性,并在
unregister()
中删除它们

然后,在操作符(或
main()
函数)和面板中,您可以通过
上下文
参数访问变量

context.scene.my_settings.my_number += 1
将其放在示例中,并使用标签显示值-

import bpy

from bpy.props import (IntProperty,)
from bpy.types import (Panel, Operator, AddonPreferences, PropertyGroup,)

def main(context):
    context.scene.my_settings.my_number += 1
    print(str(context.scene.my_settings.my_number))

class MySettings(PropertyGroup):

    my_number = IntProperty(
        name="Int property",
        description="This is an integer.",
        default = 1
        )

class AddOne(Operator):
    """This is an operator"""
    bl_idname = "op.add_one"
    bl_label = "Increment by 1"

    def execute(self, context):
        main(context)
        return {'FINISHED'}

class CreatePanel(Panel):

    bl_label = "Render Setup Panel"
    bl_idname = "OBJECT_PT_hello"
    bl_space_type = 'NODE_EDITOR'
    bl_region_type = 'TOOLS'
    bl_category = "Increment by 1 Tab"

    def draw(self, context):
        layout = self.layout

        obj = context.object

        row = layout.row()
        row.operator("op.add_one")
        row = layout.row()
        row.label(text='Value is: '+str(context.scene.my_settings.my_number))

def register():
    bpy.utils.register_class(AddOne)
    bpy.utils.register_class(MySettings)
    bpy.utils.register_class(CreatePanel)
    bpy.types.Scene.my_settings = bpy.props.PointerProperty(type=MySettings)

def unregister():
    bpy.utils.unregister_class(AddOne)
    bpy.utils.unregister_class(MySettings)
    bpy.utils.unregister_class(CreatePanel)
    del bpy.types.Scene.my_settings

if __name__ == "__main__":
    register()

您将找到一个更好的地方来寻求特定于blender的python帮助。

谢谢,我知道我需要先初始化变量,然后才能使用它。问题是在哪里?例如,如果我将'my_number=0'放在'def main(context):'代码块中,则整数将始终恢复为0,然后递增1。该值将始终为1,并且不会递增。我应该在代码中的其他地方声明'my_number=0'吗?谢谢!我会记住以后再去blender的堆栈交换。这很有帮助。
context.scene.my_settings.my_number += 1
import bpy

from bpy.props import (IntProperty,)
from bpy.types import (Panel, Operator, AddonPreferences, PropertyGroup,)

def main(context):
    context.scene.my_settings.my_number += 1
    print(str(context.scene.my_settings.my_number))

class MySettings(PropertyGroup):

    my_number = IntProperty(
        name="Int property",
        description="This is an integer.",
        default = 1
        )

class AddOne(Operator):
    """This is an operator"""
    bl_idname = "op.add_one"
    bl_label = "Increment by 1"

    def execute(self, context):
        main(context)
        return {'FINISHED'}

class CreatePanel(Panel):

    bl_label = "Render Setup Panel"
    bl_idname = "OBJECT_PT_hello"
    bl_space_type = 'NODE_EDITOR'
    bl_region_type = 'TOOLS'
    bl_category = "Increment by 1 Tab"

    def draw(self, context):
        layout = self.layout

        obj = context.object

        row = layout.row()
        row.operator("op.add_one")
        row = layout.row()
        row.label(text='Value is: '+str(context.scene.my_settings.my_number))

def register():
    bpy.utils.register_class(AddOne)
    bpy.utils.register_class(MySettings)
    bpy.utils.register_class(CreatePanel)
    bpy.types.Scene.my_settings = bpy.props.PointerProperty(type=MySettings)

def unregister():
    bpy.utils.unregister_class(AddOne)
    bpy.utils.unregister_class(MySettings)
    bpy.utils.unregister_class(CreatePanel)
    del bpy.types.Scene.my_settings

if __name__ == "__main__":
    register()