On Monday, October 31, 2022 at 11:12:14 AM UTC-4 jkn wrote:
> Thanks, this looks very interesting...
>
> I have one question - something I have wondered about before. If I have
> your example code as a button command, say ... then where/how can I put the
>
> def toggle_app_tab(log, tabname, top_widget):
> # ...
>
> code, in order for it to accessible by multiple such buttons/commands?
> I've never been sure about this.
>
> Thanks, J^n
>
[snip]
For the function to be available to all outlines, I'm sure people have
various ideas. One thing I've done in the past (with other functions) is
to assign it to some object. I tend to use c, the outline's commander. If
Edward ever changes it to use slots, I suppose this wouldn't work any
more. Using this technique, your launch command would first look to see if
it has been assigned to c. If not, it runs the def and assigns it. Then
it would be invoked. Something like this sketch -
has_tabbed_app_toggle = hasattr(c, 'toggle_app_tab')
if not has_tabbed_app_toggle:
def toggle_app_tab(log, tabname, top_widget):
# Body of function here
c.toggle_app_tab = toggle_app_tab
# Invoke function here
You can even make the function into a method of c. Other people may do
that differently, but I think the easiest way is
c.has_tabbed_app_toggle = has_tabbed_app_toggle.__get__(c)
If you did this, you would need to change the function to include *self*,
and you would need to use *self* instead of *c* in the code.
There is also a Leo decorator, *g.CommanderCommand*, that you could use (it
would have to be run first before the function could be used, and your
function cannot use "g"):
@g.CommanderCommand('z-f1')
def z_f1(self, x, y):
print(x * y)
Then:
c.z_f1(2, 3)
# prints 6
(It seems to me that there was something recently about not using this
decorator, but I can't remember for sure).
--
You received this message because you are subscribed to the Google Groups
"leo-editor" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/leo-editor/c279d409-e772-4026-b8d5-71e8b286c8c2n%40googlegroups.com.