Python 如何将我的变量从这个循环中取出?-搅拌机
我正在尝试制作一个脚本,读取一个.txt(存储.obj名称的地方),然后在blender中制作costum按钮。如果单击其中一个按钮,它将根据txt中的名称打开文件 它可以工作,但只会打开列表上的最后一个obj 我怎样才能修好它?我想让它工作 到目前为止,我的代码是:Python 如何将我的变量从这个循环中取出?-搅拌机,python,object,for-loop,import,blender,Python,Object,For Loop,Import,Blender,我正在尝试制作一个脚本,读取一个.txt(存储.obj名称的地方),然后在blender中制作costum按钮。如果单击其中一个按钮,它将根据txt中的名称打开文件 它可以工作,但只会打开列表上的最后一个obj 我怎样才能修好它?我想让它工作 到目前为止,我的代码是: import bpy class directoryPan(bpy.types.Panel): bl_space_type = "VIEW_3D" bl_region_type = "TOOLS"
import bpy
class directoryPan(bpy.types.Panel):
bl_space_type = "VIEW_3D"
bl_region_type = "TOOLS"
bl_label = "Biblio"
bl_category = "Import" #
def draw(self, context):
self.layout.row().label("Import :")
self.layout.operator("import.stuff", icon ='FILE')
obj_list = []
biblio_one = open("C:\\Users\\Jasmin\\Desktop\\liste.txt")
for line in biblio_one:
obj_list.append(line.rstrip())
biblio_one.close()
print("start")
for i in obj_list:
newbutton = i
import_obj = "import." + i
self.layout.operator(import_obj, icon ='FILE')
######
class ScanFileOperator(bpy.types.Operator):
bl_idname = import_obj
bl_label = newbutton
def execute(self, context):
pfad = "C:\\Users\\Jasmin\\Desktop\\" + newbutton+ ".obj" ###
bpy.ops.import_scene.obj(filepath= pfad, filter_glob="*.obj;*.mtl", use_ngons=True, use_edges=True, use_smooth_groups=True, use_split_objects=True, use_split_groups=True, use_groups_as_vgroups=False, use_image_search=True, split_mode='ON', global_clamp_size=0, axis_forward='-Z', axis_up='Y')
bpy.ops.object.origin_set(type = 'GEOMETRY_ORIGIN')
return {'FINISH'}
def register():
bpy.utils.register_module(__name__)
def unregister():
bpy.utils.unregister_module(__name__)
if __name__ == "__main__":
register()
我知道问题出在newbutton上,因为在绘制按钮的循环之后,它具有列表中最后一项的值。但是我不知道如何修复它。我还没有加载代码来测试它,但是从我看到newbutton是一个变量。for循环不断地设置相同的变量。这就是为什么您只能得到列表中的最后一个值 您可能需要定义一个实例化对象的函数。该函数需要将该对象构建到场景中所需的所有参数。为循环的每次迭代调用该函数将使用预期数据实例化场景的新对象,因为每个对象将封装传递给它的参数
我希望这有帮助 在搅拌机的界面中,一个按钮链接到操作员,单击该按钮可使操作员执行其任务。与其为每个按钮生成新的操作符,更好的方法是向操作符添加属性并设置每个按钮使用的属性 通过向operator类添加属性,可以在面板中显示每个按钮时为其设置属性,然后在运行该操作员时可以访问该属性
class ScanFileOperator(bpy.types.Operator):
'''Import an obj into the current scene'''
bl_idname = 'import.scanfile'
bl_label = 'Import an obj'
bl_options = {'REGISTER', 'UNDO'}
objfile = bpy.props.StringProperty(name="obj filename")
def execute(self, context):
print('importing', self.objfile)
return {'FINISHED'}
class directoryPan(bpy.types.Panel):
bl_space_type = "VIEW_3D"
bl_region_type = "TOOLS"
bl_label = "Biblio"
bl_category = "Import"
def draw(self, context):
col = self.layout.column()
col.label("Import :")
obj_list = []
biblio_one = ['obj1','obj2','obj3','obj4','obj5',]
for line in biblio_one:
obj_list.append(line.rstrip())
for i in obj_list:
import_obj = "import." + i
col.operator('import.scanfile', text='Import - '+i,
icon ='FILE').objfile = import_obj
谢谢他们的回复!因此,我希望列表中的每个文件都有一个按钮,这样我可以在单击其中一个按钮时分别导入它们。因此,我不希望通过运行脚本来实例化它们,而是通过单击右键来实例化它们。有什么建议吗?非常感谢!我需要self.objfile-这就成功了!:)