Blender Python - Ordnerinhalt in template_list anzeigen
Verfasst: 15.10.2016, 11:21
Huhu :)
Ich hänge mal wieder an Basics fest. Ich würde gern den Inhalt eines Ordners in einer template_list anzeigen.
Das Auslesen des Ordners funktioniert bereits. Der Inhalt landet derzeit in einer List. Und wird auch brav in die Konsole geprintet. Aber wie bekomme ich das jetzt nun in meine template_list rein?
Mein Problem ist kurz formuliert folgendes. Ich habe meine Liste. Und ich habe mein Blender List Item. Aber keine Verbindung zwischen den Beiden:
Einfach ist das wohl nicht. Auf Blender Stack Exchange schicken sie mich per Links in die Manual und die Python API. Und ich bin genauso schlau wie vorher. Deswegen hatte ich ja auf Stack Exchange nachgefragt, weil ich mit den Eklärungen da nicht zurechtkomme :(
Hier gibts zum Beispiel ein List Beispiel das mit Materialien arbeitet. Das steckt auch in den Scripting Beispielen: https://www.blender.org/api/blender_pyt ... IList.html
Und hier das Beispiel für eine Collection Property: https://www.blender.org/api/blender_pyt ... on-example
Und hier die Definition für template_list: https://www.blender.org/api/blender_pyt ... plate_list
Was ich verstanden habe ist dass ich wohl meine Liste in eine Collection Property umwandeln muss. Aber wie mache ich das? Und wie verknüpfe ich das dann mit der template_list? Was muss wo rein? Und vor allem warum?
Ich bin wie immer für alle sachdienlichen Hinweise dankbar :)
Liebe Grüsse
Tiles
Fast hätte ich das bisherige Script vergessen:
Uha, es zertrümmert mir wieder die Einrückungen. Da war doch noch was? Wie ging das denn ? Ich hänge mal so lang ein zipfile mit dem script an.
Ich hänge mal wieder an Basics fest. Ich würde gern den Inhalt eines Ordners in einer template_list anzeigen.
Das Auslesen des Ordners funktioniert bereits. Der Inhalt landet derzeit in einer List. Und wird auch brav in die Konsole geprintet. Aber wie bekomme ich das jetzt nun in meine template_list rein?
Mein Problem ist kurz formuliert folgendes. Ich habe meine Liste. Und ich habe mein Blender List Item. Aber keine Verbindung zwischen den Beiden:
Code: Alles auswählen
mylist = []
...
//Umwandlung in das was Blender braucht?
...
row.template_list(Was muss hier stehen?)
Hier gibts zum Beispiel ein List Beispiel das mit Materialien arbeitet. Das steckt auch in den Scripting Beispielen: https://www.blender.org/api/blender_pyt ... IList.html
Und hier das Beispiel für eine Collection Property: https://www.blender.org/api/blender_pyt ... on-example
Und hier die Definition für template_list: https://www.blender.org/api/blender_pyt ... plate_list
Was ich verstanden habe ist dass ich wohl meine Liste in eine Collection Property umwandeln muss. Aber wie mache ich das? Und wie verknüpfe ich das dann mit der template_list? Was muss wo rein? Und vor allem warum?
Ich bin wie immer für alle sachdienlichen Hinweise dankbar :)
Liebe Grüsse
Tiles
Fast hätte ich das bisherige Script vergessen:
Code: Alles auswählen
import bpy
import os
# -----------------------------------------------------------------------------------------------------
# the panel is in the properties sidebar.
# -----------------------------------------------------------------------------------------------------
mylist = []
class VIEW3D_read_dir(bpy.types.Operator):
"""Blubb"""
bl_idname = "view3d.read_dir"
bl_label = "Read Dir"
def execute(self, context):
mylist = [] # empty the list
start_path = 'C:/Users/x/Documents' # current directory. Change to your needs. Do NOT use backslashes here.
for path,dirs,files in os.walk(start_path):
for filename in files:
if filename.endswith(".blend"):
mylist.append(os.path.join(filename))
print (mylist) # debugging. The content in the console.
return {'FINISHED'}
class MyPanel(bpy.types.Panel):
bl_label = "MyPanel"
bl_space_type = 'VIEW_3D'
bl_region_type = 'UI'
def draw(self, context):
layout = self.layout
layout.operator("view3d.read_dir", text="read directory") # Click me to read the directory. Content of blend files will be printed in the console.
scene = context.scene
row = layout.row()
row.template_list("UI_UL_list", "keying_sets", scene, "keying_sets", scene.keying_sets, "active_index", rows=1) # Placeholder for my template_list
# ------------------------------ register unregister --------------------------------------------------------
def register():
bpy.utils.register_module(__name__)
def unregister():
bpy.utils.unregister_module(__name__)
if __name__ == "__main__":
register()