لماذا لا يتم ضبط light_manager الخاص بـ MlabSceneModel؟
سؤال
أنا أستخدم Mayavi لتصور ثلاثي الأبعاد باستخدام TraitsUI.ال scene
هي سمة من النوع MlabSceneModel.أريد تغيير الإضاءة ومحاولة الوصول scene.light_manager
في وظيفة تسمى على activated
حدث.لكن، scene.light_manager
دائما None
.
استخدام mlab.figure()
لإنشاء مشهد يحتوي على مدير إضاءة، ولكن بما أنني أريد دمج المشهد في واجهة المستخدم وليس في نافذة إضافية، فهذا ليس خيارًا بالنسبة لي.
المحلول
سؤال جيد دفعني إلى حلقة في البداية.
بالنظر إلى مصدر tvtk، تتم إضافة مدير الضوء إلى المشهد عند إنشاء المتفاعل، والذي يحدث بعد تنشيط المشهد.علاوة على ذلك، فإن أول شيء حاولت فعله هو الاستماع إليه 'scene:light_manager'
لا يعمل لأن مدير الضوء هو Property
السمة التي لا تتغير مباشرة.ومع ذلك، إذا استمعت إلى الكائن نفسه، والذي تشير إليه الخاصية، فسيؤدي ذلك إلى إصدار إشعار عند الإنشاء.بمعنى آخر، افعل هذا:
class Application(HasTraits):
scene=Instance(MlabSceneModel,())
...
@on_trait_change('scene:scene_editor:light_manager')
def muck_with_the_lights(self):
print self.scene.light_manager