我想用encol使用chaco工具ScatterInspector
和/或ScatterInspectorOverlay
。我已經設置了一個非常簡單的控制器和視圖(源代碼如下),但無法確定如何繼續。我嘗試過不成功地遵循我發現的最小和舊的例子。如何使用ScatterInspector和ScatterInspectorOverlay?
如果我取消了ScatterInspectorOverlay
重疊部分,該代碼不能與
文件「... /查科/ scatter_inspector_overlay.py」 51行運行,在覆蓋如果不打印或不情節。指數或不getattr的(劇情,「價值」,真):
如果我註釋掉覆蓋部分,我當然沒有得到覆蓋的行爲我想也是,上移動鼠標,得到
文件 「... /查科/工具/ scatter_inspector.py」,第48行,在normal_mouse_move指數= plot.map_index((event.x,event.y),閾值= self.threshold)
視圖.enaml來源:
from enaml.widgets.api import (
Window, Container, EnableCanvas,
)
enamldef ScatterView(Window):
attr controller
title = "Scatter Inspector Test"
initial_size = (640,480)
Container:
EnableCanvas:
component = controller.scatter_plot
controller.py來源:
import enaml
from enaml.stdlib.sessions import show_simple_view
from traits.api import HasTraits, Instance
from chaco.api import Plot, ArrayPlotData, ScatterInspectorOverlay
from chaco.tools.api import ScatterInspector
from numpy import linspace, sin
class ScatterController(HasTraits):
scatter_plot = Instance(Plot)
def _scatter_plot_default(self):
# data
x = linspace(-14, 14, 100)
y = sin(x) * x**3
plotdata = ArrayPlotData(x = x, y = y)
# plot
scatter_plot = Plot(plotdata)
renderer = scatter_plot.plot(("x", "y"), type="scatter", color="red")
# inspector
scatter_plot.tools.append(ScatterInspector(scatter_plot))
# overlay
# scatter_plot.overlays.append(ScatterInspectorOverlay(
# scatter_plot,
# hover_color = 'red',
# hover_marker_size = 6,
# selection_marker_size = 6,
# selection_color = 'yellow',
# selection_outline_color='purple',
# selection_line_width = 3
# ))
#return
return scatter_plot
if __name__ == "__main__":
with enaml.imports():
from view import ScatterView
main_controller = ScatterController()
window = ScatterView(controller=ScatterController())
show_simple_view(window)
這幾乎是對我的作品 - 圖形用戶界面來了,我可以選擇用鼠標散點圖點,但在'when_hover_or_selection_changes'似乎沒有了'print'執行。注意我必須添加'from traits.api import on_trait_change'。你知道一種調試方法嗎? – meowsqueak 2013-10-29 09:12:18
如果有幫助,使用https://svn.enthought.com/enthought/wiki/OnTraitChangeDispatch中的DebugWrapper,當點擊一個點時,我會看到以下內容:'通知:>()'和 '處的ScatterPlot對象'0x114f805f0 >>,'metadata_changed',的
meowsqueak
2013-10-29 09:28:04
實際上,我不確定這個'@ on_trait_change'行的縮進級別應該是多少。它應該是'ScatterController'的方法,還是在_scatter_plot_default函數中的函數定義,如上面的格式所示?我已經嘗試了兩種。編輯:因爲它引用'self.renderer'我會去與它是一個普通的類方法。但是這也表明self.renderer需要設置在某個地方。在上面的代碼中,它沒有設置。 – meowsqueak 2013-10-29 09:33:40