Quantcast
Channel: How to add click event listener to button operator? - Blender Stack Exchange
Viewing all articles
Browse latest Browse all 3

How to add click event listener to button operator?

$
0
0

How do you add a listener to a button? I need to handle something in the panel once a button is clicked but I don't know how to add this click event listener.

import bpy

class SimplePanel(bpy.types.Panel):    def on_button_click(self, context):        print("button clicked")    def draw(self, context):        layout = self.layout        row = layout.row()        op = row.operator("object.simple_operator")        op.add_click_listener(on_button_click) #FIXME

If I add a callback setter function in my operator like

def set_exec_callback(self, callback):   self.exec_callback = callback

and then do:

op.set_exec_callback(on_click)

It mistakenly tells me that

AttributeError: 'OBJECT_OT_my_operator' object has no attribute'set_exec_callback'

even though it is clearly defined in my operator

Here's a script that reproduces the bug:

import bpyclass SimpleOperator(bpy.types.Operator):    bl_idname = "object.simple_operator"    bl_label = "Simple Operator"    def __init__(self):        self.callback = None    def set_callback(self, callback):        self.callback = callback    def execute(self, context):        self.callback()        return {'FINISHED'}def my_callback():    print("Callback function called")class TestPanel(bpy.types.Panel):    bl_label = "Test Panel"    bl_idname = "PT_TestPanel"    bl_space_type = 'VIEW_3D'    bl_region_type = 'UI'    bl_category = 'Test'    def draw(self, context):        layout = self.layout        op = layout.operator(SimpleOperator.bl_idname, text="Execute Simple Operator")        op.set_callback(my_callback) # AttributeError: 'OBJECT_OT_simple_operator' object has no attribute 'set_callback'def register():    bpy.utils.register_class(SimpleOperator)    bpy.utils.register_class(TestPanel)def unregister():    bpy.utils.unregister_class(SimpleOperator)    bpy.utils.unregister_class(TestPanel)# Test the panelif __name__ == "__main__":    register()

Viewing all articles
Browse latest Browse all 3

Latest Images

Trending Articles





Latest Images

<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>
<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596344.js" async> </script>