एक फ़ंक्शन में केंद्रीयकरण गुण अपडेट? [डुप्लिकेट]
वहाँ किसी भी तरह से यह अद्यतन समारोह से प्रोप की कुछ और जानकारी है?
नीचे दिए गए उदाहरण में, दुर्भाग्य से, स्व bpy.types.Scene को इंगित करेगा, बजाय स्वयं के प्रोप के। इसलिए यह पहली नज़र में लगता है कि हमें अपडेट फ़ंक्शन से प्रॉपर की कोई भी जानकारी नहीं हो सकती है, और हमें एक केंद्रीय अद्यतन अपडेट फ़ंक्शन के बजाय प्रति प्रोपेल प्रति एक अपडेट फ़ंक्शन के लिए मजबूर किया जाता है जो हर एक प्रोप के साथ काम कर सकता है।
(ध्यान दें कि हमारे पास सेट से अधिक जानकारी हो सकती है , लेकिन निश्चित रूप से, यह फीडबैक लूप बनाएगा यदि हम प्रोप वैल्यू को बदलते हैं ..)
कृपया मुझे गलत साबित करें
def update(self,context):
print("what is this prop value?")
print("what is this prop api?")
print("what is this prop name?")
return None
bpy.types.Scene._prop : bpy.props.FloatProperty(default=1.0 , name="Prop", update=update)
bpy.types.Scene._prop_this : bpy.props.FloatProperty(default=1.1 , name="Prop This", update=update)
bpy.types.Scene._prop_that : bpy.props.FloatProperty(default=1.2 , name="Prop That", update=update)
bpy.types.Scene._prop_another : bpy.props.FloatProperty(default=1.3 , name="Prop Another", update=update)
जवाब
अपनी अद्यतन विधि बनाने के लिए एक सामान्य कार्य करें।
@Pinkvertex द्वारा इसे खोजने के लिए बहुत ही समान एक और जवाब है।
अद्यतन विधि के रूप में एक फ़ंक्शन का उपयोग करने के बजाय, गुणों को पास करने के लिए एक विधि कारखाना बनाएं।
उदाहरण कोड, और उदाहरण रन (सुंदर आत्म-व्याख्यात्मक),
import bpy
from bpy.props import FloatProperty
from bpy.types import Scene
def update(prop):
def update(self, context):
print(f"Update {prop} of {self}")
return None
return update
for prop in ("prop_this", "prop_that", "prop_another"):
setattr(
Scene,
prop,
FloatProperty(
default=1.0,
name="Prop",
update=update(prop)
)
)
नमूना चला।
>>> C.scene.prop_this
1.0
>>> C.scene.prop_this = 4
Update prop_this of <bpy_struct, Scene("Scene") at 0x7fc97bff8008>
>>>
दो बातें फिर से सवाल कोड,
गुण प्रकार को असाइन किए जाते हैं, एनोटेशन के रूप में नहीं। वर्ग परिभाषा में एनोटेशन का उपयोग करें।
अंडरस्कोर के साथ पूर्वनिर्मित एक निजी चर नहीं बना सकता।
>>> bpy.types.Scene._prop = bpy.props.FloatProperty() Traceback (most recent call last): File "<blender_console>", line 1, in <module> ValueError: bpy_struct "Scene" registration error: _prop could not register because the property starts with an '_'