Blender Asked by Richard Collao on January 3, 2021
I have tried in several ways and the only one that worked for me was through a modal that extends from ImportHelper, however I would like to do everything from the main panel.
enter code here
import bpy
from bpy.props import StringProperty
class MainPanel(bpy.types.Panel):
bl_idname = "Test"
bl_label = "Test File"
bl_space_type = "VIEW_3D"
bl_region_type = "UI"
bl_category = 'View'
def draw(self, context):
layout = self.layout
scene = context.scene
layout.prop(scene, 'file_')
def showPath(self, context):
print("filepath: ", bpy.context.scene.file_)# return only //x_bot.json
print("self.filepath", self.filepath)# return error
def register():
bpy.utils.register_class(MainPanel)
bpy.types.Scene.file_ = bpy.props.StringProperty(name= "File", subtype='FILE_PATH', update=showPath)
def unregister():
bpy.utils.unregister_class(MainPanel)
if __name__ == "__main__":
register()
```
bpy.path.abspath()
Returns the absolute path relative to the current blend file using the “//” prefix.
TLDR; Just call bpy.path.abspath(your_path)
to get the absolute path representation.
There is no reason to display the absolute path nor convert it because the user can set it to absolute or relative in the File Browser (N):
Also notice: there are several naming conventions like adding a separator to the name of your panel class or using lowercase names for functions and variables (PEP8):
import bpy
class CATEGORY_PT_CustomPanel(bpy.types.Panel):
bl_idname = "OBJECT_PT_my_panel"
bl_label = "My Panel"
bl_space_type = "VIEW_3D"
bl_region_type = "UI"
bl_category = "Tools"
bl_context = "objectmode"
def draw(self, context):
layout = self.layout
scn = context.scene
col = layout.column(align=True)
col.prop(scn, "my_path", text="")
# Print the absolute and relative path to the console
print ("REL:", scn.my_path)
print ("ABS:", bpy.path.abspath(scn.my_path))
def register():
bpy.utils.register_class(CATEGORY_PT_CustomPanel)
bpy.types.Scene.my_path = bpy.props.StringProperty(name="File", subtype='FILE_PATH')
def unregister():
bpy.utils.unregister_class(CATEGORY_PT_CustomPanel)
del bpy.types.Scene.my_path
if __name__ == "__main__":
register()
Related
Correct answer by brockmann on January 3, 2021
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP