我目前正在潜入Flexx为我的Python程序制作UI。我开始掌握窍门了,但我遇到了一个问题。你知道吗
我需要能够从^{app.cls
给出了用于实例化应用程序的类,但它不是实际的实例,所以我不能执行类似app.cls.my_method(...)
的操作。你知道吗
有没有办法只知道App
实例就可以在app包装器中获取组件的实例?你知道吗
谢谢!你知道吗
编辑:查看源代码后,我找到了大多数未记录的AppManager
和Session
定义,并可以通过以下方式获得对组件实例的引用:
from flexx.app import manager
app_instance = manager.get_connections('MyAppName')[0].app
但是如果我从^{watchdog.events.FileSystemEventHandler
调用它的一个方法,我会得到以下回溯:
File "myfile.py", line 37, in on_created
manager.get_connections('MyAppName')[0].app.update_verbose(False)
File "lib\site-packages\flexx\event\_action.py", line 150, in __call__
if loop.can_mutate(ob):
File "lib\site-packages\flexx\event\_loop.py", line 85, in can_mutate
active = self.get_active_component()
File "lib\site-packages\flexx\event\_loop.py", line 103, in get_active_component
if len(self._local._active_components) > 0:
AttributeError: '_thread._local' object has no attribute '_active_components'
注意,update_verbose
是一个Flexx操作,它改变了一个属性。我怀疑一个问题,看门狗处理程序运行在不同的线程上,但我看不到要更改什么。。。你知道吗
正如所怀疑的,问题可能来自这样一个事实:
FileSystemEventHandler
运行在不同于flex循环的线程上。感谢作者almarklein关于解决这个问题的help。你知道吗解决方案是获取对根对象的引用,而不是使用我的问题中描述的复杂方法,而是使用
launch
调用的返回值:然后在事件处理程序内部,告诉主循环调用我的方法(用
@flx.action
修饰):希望有一天这能帮上忙!你知道吗
相关问题 更多 >
编程相关推荐