BlenderCN论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1169|回复: 4

(求助)从菜单弹出属性窗体失败

[复制链接]
发表于 2013-6-12 13:30:15 | 显示全部楼层 |阅读模式
最近写一个小的addon,想做一个弹窗,搜寻找到一些教程,核心代码都是在operator类中加入如下几行:
def invoke(self, context, event):
        
        wm = context.window_manager
        return wm.invoke_props_dialog(self, width=180)
这几行代码可以从panel按钮弹出属性框:
xxx.png

然而做到popmenu菜单中就不行了。如下:
xxx2.png
点这个始终没反应,无法弹出,对windows manage不懂,请各位大侠提点。


发表于 2013-6-12 23:23:59 | 显示全部楼层
记忆突然有点矛盾,建议找一个能pop的插件,看看。记得有,但是得找。
回复 支持 反对

使用道具 举报

发表于 2013-6-13 09:35:12 | 显示全部楼层
弹出调节框

  1. import bpy


  2. class DialogOperator(bpy.types.Operator):
  3.     bl_idname = "object.dialog_operator"
  4.     bl_label = "Simple Dialog Operator"

  5.     my_float = bpy.props.FloatProperty(name="Some Floating Point")
  6.     my_bool = bpy.props.BoolProperty(name="Toggle Option")
  7.     my_string = bpy.props.StringProperty(name="String Value")

  8.     def execute(self, context):
  9.         message = "Popup Values: %f, %d, '%s'" % \
  10.             (self.my_float, self.my_bool, self.my_string)
  11.         self.report({'INFO'}, message)
  12.         return {'FINISHED'}

  13.     def invoke(self, context, event):
  14.         wm = context.window_manager
  15.         return wm.invoke_props_dialog(self)

  16. def menu_func( self, context ):
  17.     layout = self.layout
  18.     layout.operator_context = "INVOKE_DEFAULT"
  19.     layout.separator(  )
  20.     layout.operator( DialogOperator.bl_idname , 'Pop Dialog')
  21.    
  22. bpy.utils.register_class(DialogOperator)

  23. #注册到模型mesh的edit编辑mode模式的w,special特殊菜单
  24. bpy.types.VIEW3D_MT_edit_mesh_specials.append( menu_func )
  25. #注册到模型mesh的edit编辑mode模式的 toolbar,工具栏
  26. bpy.types.VIEW3D_PT_tools_meshedit.append( menu_func )

复制代码
回复 支持 反对

使用道具 举报

发表于 2013-6-13 09:50:49 | 显示全部楼层
顺道贴一个官方的,有兴趣的对比一下。
http://wiki.blender.org/index.ph ... _snippets/Interface


  1. #----------------------------------------------------------
  2. # File popup.py
  3. # from API documentation
  4. #----------------------------------------------------------

  5. import bpy
  6. from bpy.props import *

  7. theFloat = 9.8765
  8. theBool = False
  9. theString = "Lorem ..."
  10. theEnum = 'one'

  11. class DialogOperator(bpy.types.Operator):
  12.     bl_idname = "object.dialog_operator"
  13.     bl_label = "Simple Dialog Operator"

  14.     my_float = FloatProperty(name="Some Floating Point",
  15.         min=0.0, max=100.0)
  16.     my_bool = BoolProperty(name="Toggle Option")
  17.     my_string = StringProperty(name="String Value")
  18.     my_enum = EnumProperty(name="Enum value",
  19.         items = [('one', 'eins', 'un'),
  20.                  ('two', 'zwei', 'deux'),
  21.                  ('three', 'drei', 'trois')])

  22.     def execute(self, context):
  23.         message = "%.3f, %d, '%s' %s" % (self.my_float,
  24.             self.my_bool, self.my_string, self.my_enum)
  25.         self.report({'INFO'}, message)
  26.         print(message)
  27.         return {'FINISHED'}

  28.     def invoke(self, context, event):
  29.         global theFloat, theBool, theString, theEnum
  30.         self.my_float = theFloat
  31.         self.my_bool = theBool
  32.         self.my_string = theString
  33.         self.my_enum = theEnum
  34.         return context.window_manager.invoke_props_dialog(self)


  35. bpy.utils.register_class(DialogOperator)

  36. # Invoke the dialog when loading
  37. bpy.ops.object.dialog_operator('INVOKE_DEFAULT')

  38. #
  39. #    Panel in tools region
  40. #
  41. class DialogPanel(bpy.types.Panel):
  42.     bl_label = "Dialog"
  43.     bl_space_type = "VIEW_3D"
  44.     bl_region_type = "UI"

  45.     def draw(self, context):
  46.         global theFloat, theBool, theString, theEnum
  47.         theFloat = 12.345
  48.         theBool = True
  49.         theString = "Code snippets"
  50.         theEnum = 'two'
  51.         self.layout.operator("object.dialog_operator")

  52. #
  53. #        Registration
  54. bpy.utils.register_module(__name__)

复制代码

点评

谢谢回复,问题解决,关键是这句: layout.operator_context = "INVOKE_DEFAULT"  详情 回复 发表于 2013-6-13 13:43
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-6-13 13:43:29 | 显示全部楼层
nirenyang 发表于 2013-6-13 09:50
顺道贴一个官方的,有兴趣的对比一下。
http://wiki.blender.org/index.php/Dev:2.5/Py/Scripts/Cookbook/C ...

谢谢回复,问题解决,关键是这句:
layout.operator_context = "INVOKE_DEFAULT"
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

Blender最新中文教学视频|Blender头条|小黑屋|手机版|Archiver|Blender中国 ( 蜀ICP备17002929号 )360网站安全检测平台

GMT+8, 2019-11-22 11:52 , Processed in 0.022855 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表