рдЖрдЬ рдореИрдВ рдЖрдкрдХреЛ рдЪрд╛рдХреЛ рдирд╛рдордХ рдПрдХ рдЕрджреНрднреБрдд рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдКрдВрдЧрд╛, рдЬрд┐рд╕реЗ рдЙрддреНрд╕рд╛рд╣ рд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдЪрд╛рдХреЛ рдкрд╛рдпрдерди рдореЗрдВ рдХрд┐рд╕реА рднреА рдЬрдЯрд┐рд▓рддрд╛ рдХреЗ рдЧреНрд░рд╛рдл рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реИред рдпрд╣ рд╕реНрдереИрддрд┐рдХ рдбреЗрдЯрд╛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рдПрдирд┐рдореЗрд╢рди рдмрдирд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рднреА рд╣реИред

рдЬреИрд╕реЗ рдорд╛рдпрд╛рд╡реА Wx рдФрд░ Qt (PyQt рдФрд░ PySide) рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдПрдХреАрдХреГрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ Numpy рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рджреЛрд╕реНрдд рд╣реИред
рд╕реНрдерд╛рдкрдирд╛
рдкрд╣рд▓рд╛ рдХрджрдо рдЪрд╛рдХреЛ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╣реИред рд╣рдо рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рдбрд╛рд▓рддреЗ рд╣реИрдВ: рдЧрд┐рдЯ, рддреЛрдбрд╝рдлреЛрдбрд╝, рд╕реЗрдЯрдкреВрд▓, рд╕реНрд╡рд┐рдЧ, рд╕реБрдкреА, рд╕реНрдХреИрдкреА, рд╡реАрдЯреАрдХреЗ, wxpythonред рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╡рд┐рди рдХреЗ рд▓рд┐рдП mingw (vtk рдФрд░ wxpython) рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдореИрдВ рдЖрдкрдХреЛ рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рд╕рдордп рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП
www.lfd.uci.edu/~gohlke/pythonlibs рдпрд╣рд╛рдВ рд╕реЗ рд▓реЗрдВ)ред рд╣рдо рдИрдЯреАрдПрд╕ рдЙрддреНрдкрд╛рджреЛрдВ рдХреЛ рдЬреАрдЖрдИрдЯреА рд╕реЗ рд╣рдЯрд╛рддреЗ рд╣реИрдВ (рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╣рдЯрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ):
mkdir ets && cd ets
wget github.com/enthought/ets/raw/master/ets.py
python ets.py clone
рдлрд┐рд░ рд╣рдо рдЗрд╕ рдкреВрд░реА рдЪреАрдЬрд╝ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рддреЗ рд╣реИрдВ:
python ets.py develop
рдЖрдкрдХреЛ рдХреБрдЫ рдФрд░ рд╡рд┐рддрд░рд┐рдд рдХрд░рдирд╛ рдкрдбрд╝ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣рд╛рдВ рдЖрдкрдХреЛ рдмрд┐рд▓реНрдб рд▓реЙрдЧ рдХреЛ рджреЗрдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдХреНрдпрд╛ рдЧрд╛рдпрдм рдерд╛, рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдФрд░ рдЪрд▓рд╛рдПрдВред
рдЙрджрд╛рд╣рд░рдг
рдИрдЯреАрдПрд╕ / рдЪрд╛рдХреЛ / рдЙрджрд╛рд╣рд░рдг рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ, рдЖрдк рд╡рд┐рднрд┐рдиреНрди рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рд╕рдВрдЧреНрд░рд╣ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдмрд╣реБрдд рдЕрдЪреНрдЫреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореЗрд░реЗ рд▓рд┐рдП рдХреБрдЫ рд╕рдордЭрд╛рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рдореБрдЭреЗ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдХреЛрдб рдорд┐рд▓рддрд╛ рд╣реИред
рдореИрдВ рдХреЗрд╡рд▓ рдХреБрдЫ рдЕрд╕рд╛рдорд╛рдиреНрдп рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдЪрд╛рдХреЛ рдореЗрдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ:
рд╡рд┐рддреНрддреАрдп:

рдпрд╣ рдЙрджрд╛рд╣рд░рдг PySide рд╡рд┐рдЬреЗрдЯ рдореЗрдВ рдПрдореНрдмреЗрдбрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
# - * - рдХреЛрдбрд┐рдВрдЧ: utf-8 - * _ <br/>
<br/>
# <br/> рд╕реЗ рдкрд╣рд▓реЗ pyside рдкрд░ QT_API рд╡реИрд░рд┐рдПрдмрд▓ рд╕реЗрдЯ рдХрд░рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ
# рдХреИрд╕реЗ рдЪрд╛рдХреЛ рдореЙрдбреНрдпреВрд▓ рдЖрдпрд╛рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ <br/>
рдЖрдпрд╛рдд os <br/>
рдУрдПрд╕ ред environ [ 'QT_API' ] = 'pyside' <br/>
рдУрдПрд╕ ред environ [ 'ETS_TOOLKIT' ] = 'qt4' <br/>
PySide рдХреЗ рдЖрдпрд╛рдд рд╕реЗ QtGui, QtCore <br/>
<br/>
рд╕реБрдиреНрди рдЖрдпрд╛рдд рд╕реЗ рдкреЗрдЯ , arange, cumprod, рдпрд╛рджреГрдЪреНрдЫрд┐рдХ <br/>
рд╕рдХреНрд╖рдо рд╕реЗред example_support рдЖрдпрд╛рдд DemoFrame, Demo_main <br/>
рд╕рдХреНрд╖рдо рд╕реЗред рдПрдкреАрдЖрдИ рдЖрдпрд╛рдд рдЦрд┐рдбрд╝рдХреА, рдШрдЯрдХ, рдШрдЯрдХ рдпрдВрддреНрд░ <br/>
рд▓рдХреНрд╖рдгреЛрдВ рд╕реЗред рдПрдкреАрдЖрдИ рдЖрдпрд╛рдд рд╣реИрдЯреНрд░реЗрдЯреНрд╕, рдЗрдВрд╕реНрдЯреЗрдВрд╕ <br/>
рдЯреНрд░рд┐рдЯрд╕реБрдИ рд╕реЗред рдПрдкреАрдЖрдИ рдЖрдпрд╛рдд рдЖрдЗрдЯрдо, рд╕рдореВрд╣, рджреЗрдЦреЗрдВ <br/>
рдЪрд╛рдХреЛ рд╕реЗред рдПрдкреАрдЖрдИ рдЖрдпрд╛рдд ArrayDataSource, BarPlot, DataRange1D, \ <br/>
рд▓рд┐рдирд┐рдпрд░рдореИрдкрд░, VPlotContainer, PlotAxis, FilledLinePlot, \ <br/>
add_default_grids, PlotLabel <br/>
рдЪрд╛рдХреЛ рд╕реЗред рдЙрдкрдХрд░рдг ред рдПрдкреАрдЖрдИ рдЖрдпрд╛рдд рдкреИрдирдЯреВрд▓, рдЬрд╝реВрдордЯреВрд▓ <br/>
<br/>
# рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдЬреЛ рдЧреНрд░рд╛рдлрд╝ рдХреЗ рд╕рд╛рде рдПрдХ рдХрдВрдЯреЗрдирд░ рдмрдирд╛рддрд╛ рд╣реИ <br/>
def _create_plot_component ( ) : <br/>
<br/>
# рдЧреНрд░рд╛рдлрд╝ рдХреЗ рд▓рд┐рдП рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдорд╛рди рдмрдирд╛рдПрдВ <br/>
рд╕рдВрдЦреНрдпрд╛ = 500 <br/>
index = arange ( рд╕рдВрдЦреНрдпрд╛рдПрдБ ) <br/>
рд░рд┐рдЯрд░реНрди = рдпрд╛рджреГрдЪреНрдЫрд┐рдХ ред lognormal ( 0.01 , 0.1 , size = numpoint ) <br/>
рдореВрд▓реНрдп = 100.0 * cumprod ( рд░рд┐рдЯрд░реНрди ) <br/>
рдорд╛рддреНрд░рд╛ = рдЕрдиреБрдк ( рдпрд╛рджреГрдЪреНрдЫрд┐рдХ ред рд╕рд╛рдорд╛рдиреНрдп ( 1000.0 , 1500.0 , рдЖрдХрд╛рд░ = рд╕рдВрдЦреНрдпрд╛ ) + 2000.0 ) <br/>
<br/>
# ArrayDataSource - рдпреЗ рдРрд╕реА рд╕рд░рдгрд┐рдпрд╛рдБ рд╣реИрдВ рдЬреЛ рд╣рдорд╛рд░реЗ рдбреЗрдЯрд╛ рдХреЛ <br/> рд╕реНрдЯреЛрд░ рдХрд░рддреА рд╣реИрдВ
time_ds = ArrayDataSource ( рдЗрдВрдбреЗрдХреНрд╕ ) <br/>
vol_ds = ArrayDataSource ( рд╡реЙрд▓реНрдпреВрдо, рд╕реЙрд░реНрдЯ_рдСрд░реНрдбрд░ = "рдХреЛрдИ рдирд╣реАрдВ" ) <br/>
price_ds = ArrayDataSource ( рдореВрд▓реНрдп, рд╕реЙрд░реНрдЯ_рдСрд░реНрдбрд░ = "рдХреЛрдИ рдирд╣реАрдВ" ) <br/>
<br/>
# рд░реИрдЦрд┐рдХрдореАрдЯрд░ - рдпреЗ рдЕрдХреНрд╖ рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╕рд░рдгрд┐рдпрд╛рдБ <br/> рд╣реИрдВ
xmapper = LinearMapper ( рд╢реНрд░реЗрдгреА = DataRange1D ( time_ds ) ) <br/>
vol_mapper = LinearMapper ( рд╢реНрд░реЗрдгреА = DataRange1D ( vol_ds ) ) <br/>
price_mapper = LinearMapper ( рд╢реНрд░реЗрдгреА = DataRange1D ( price_ds ) ) <br/>
<br/>
# рдЪрд╛рд░реНрдЯ рдХреЗ рдиреАрдЪреЗ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рднрд░рдиреЗ рдХреЗ рд╕рд╛рде FilledLinePlot рдкреНрд░рдХрд╛рд░ рдХрд╛ рдореВрд▓реНрдп рдЪрд╛рд░реНрдЯ <br/>
price_plot = FilledLinePlot ( index = time_ds, value = price_ds, <br/>
index_mapper = xmapper, <br/>
value_mapper = price_mapper, <br/>
edge_color = "рдмреНрд▓реВ" , <br/>
face_color = "paleturquoise" , <br/>
bgcolor = "рд╕рдлреЗрдж" , <br/>
рдмреЙрд░реНрдбрд░_рд╡рд┐рд╢реЗрд╖ = рд╕рддреНрдп ) <br/>
<br/>
# рдЧреНрд░рд┐рдб рдФрд░ рдХреБрд▓реНрд╣рд╛рдбрд╝реА рдЬреЛрдбрд╝реЗрдВ <br/>
add_default_grids ( price_plot ) <br/>
price_plotред рдУрд╡рд░рд▓реЗ ред рдкрд░рд┐рд╢рд┐рд╖реНрдЯ ( рдкреНрд▓реЙрдЯрдПрдХреНрд╕рд┐рд╕ ( price_plot, рдУрд░рд┐рдПрдВрдЯреЗрд╢рди = 'рд▓реЗрдлреНрдЯ' ) ) <br/>
price_plotред рдУрд╡рд░рд▓реЗ ред рдкрд░рд┐рд╢рд┐рд╖реНрдЯ ( рдкреНрд▓реЙрдЯрдПрдХреНрд╕рд┐рд╕ ( price_plot, рдУрд░рд┐рдПрдВрдЯреЗрд╢рди = 'рдирд┐рдЪрд▓рд╛' ) ) <br/>
<br/>
# рдЪрд╛рд░реНрдЯ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝реЗрдВ <br/>
price_plotред рдЙрдкрдХрд░рдг ред append ( PanTool ( price_plot, constrain = True , <br/>)
constrain_direction = "x" ) ) <br/>
# рдЬрд╝реВрдо рдЬреЛрдбрд╝реЗрдВ <br/>
price_plotред рдУрд╡рд░рд▓реЗ ред append ( ZoomTool ( price_plot, drag_button = "right" , <br/>)
рд╣рдореЗрд╢рд╛_рди = рд╕рддреНрдп , <br/>
tool_mode = "рд╢реНрд░реЗрдгреА" , <br/>
ax = "index" ) ) <br/>
<br/>
# BarPlot - рдмрд╛рд░ рдЪрд╛рд░реНрдЯ <br/>
vol_plot = BarPlot ( index = time_ds, value = vol_ds, <br/>
index_mapper = xmapper, <br/>
value_mapper = vol_mapper, <br/>
line_color = "рдкрд╛рд░рджрд░реНрд╢реА" , <br/>
fill_color = "рдмреНрд▓реИрдХ" , <br/>
bar_width = 1.0 , <br/>
bar_width_type = "рд╕реНрдХреНрд░реАрди" , <br/>
antialias = рдЧрд▓рдд , <br/>
рдКрдБрдЪрд╛рдИ = 100 , <br/>
resizable = "h" , <br/>
bgcolor = "рд╕рдлреЗрдж" , <br/>
рдмреЙрд░реНрдбрд░_рд╡рд┐рд╢реЗрд╖ = рд╕рддреНрдп ) <br/>
<br/>
# рдЧреНрд░рд┐рдб рдФрд░ рдХреБрд▓реНрд╣рд╛рдбрд╝реА рдЬреЛрдбрд╝реЗрдВ <br/>
add_default_grids ( vol_plot ) <br/>
vol_plotред рд░реЗрдЦрд╛рдВрдХрд┐рдд рдХрд░рддрд╛ рд╣реИ ред рдкрд░рд┐рд╢рд┐рд╖реНрдЯ ( рдкреНрд▓реЙрдЯрдПрдХреНрд╕рд┐рд╕ ( vol_plot, рдУрд░рд┐рдПрдВрдЯреЗрд╢рди = 'рд▓реЗрдлреНрдЯ' ) ) <br/>
vol_plotред рдЙрдкрдХрд░рдг ред append ( PanTool ( vol_plot, constrain = True , <br/>)
constrain_direction = "x" ) ) <br/>
<br/>
# рдХрдВрдЯреЗрдирд░ - рд╣рдорд╛рд░реЗ рдЧреНрд░рд╛рдлрд╝ рдХреА рдПрдХ рд╕рд░рдгреА, рдЙрдирдХреЗ рд╕реНрдерд╛рди рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ <br/>
рдХрдВрдЯреЗрдирд░ = VPlotContainer ( bgcolor = "lightblue" , <br/>
рд░рд┐рдХреНрддрд┐ = 20 , <br/>
рдЧрджреНрджреА = 50 , <br/>
fill_padding = рдЧрд▓рдд ) <br/>
рдХрдВрдЯреЗрдирд░ред add ( vol_plot ) <br/>
рдХрдВрдЯреЗрдирд░ред add ( price_plot ) <br/>
# рдХрдВрдЯреЗрдирд░ рдХреЗ рдКрдкрд░ рдХреИрдкреНрд╢рди рдЬреЛрдбрд╝реЗрдВ <br/>
рдХрдВрдЯреЗрдирд░ред рдУрд╡рд░рд▓реЗ ред рдкрд░рд┐рд╢рд┐рд╖реНрдЯ ( рдкреНрд▓реЙрдЯрд▓реИрдмреЗрд▓ ( "рд╡рд┐рддреНрддреАрдп рдкреНрд▓реЙрдЯ" , <br/>
рдШрдЯрдХ = рдХрдВрдЯреЗрдирд░, <br/>
рдлрд╝реЙрдиреНрдЯ = "рдПрд░рд┐рдпрд▓ 24" ) ) <br/>
рд╡рд╛рдкрд╕реА рдХрдВрдЯреЗрдирд░ <br/>
<br/>
<br/>
рд╡рд░реНрдЧ рдбреЗрдореЛ ( HasTraits ) : <br/>
# HasTraits рдПрдХ рд╡рд┐рд╢реЗрд╖ рд▓рдХреНрд╖рдг рд╢рдмреНрджрд╛рд╡рд▓реА рд╡рд░реНрдЧ рд╣реИ рдЬреЛ <br/> рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ
# рдХрд┐рд╕реА рд╣реИрдВрдбрд▓рд░ рдХреЗ рд╕рд╛рдеред <br/>
рдкреНрд▓реЙрдЯ = рдЗрдВрд╕реНрдЯреЗрдВрд╕ ( рдШрдЯрдХ ) <br/>
<br/>
# рджреЗрдЦреЗрдВ - рд╣рдорд╛рд░реЗ рд░реЗрдЦрд╛рдВрдХрди рдХреА рдкреНрд░рд╕реНрддреБрддрд┐ред <br/>
traits_view = рджреГрд╢реНрдп ( <br/>)
рд╕рдореВрд╣ ( <br/>
рдЖрдЗрдЯрдо ( 'рдкреНрд▓реЙрдЯ' , рдПрдбрд┐рдЯрд░ = рдХрдВрдкреЛрдиреЗрдВрдЯ рдПрдбрд┐рдЯрд░ ( рдЖрдХрд╛рд░ = ( 800 , 600 ) ) , <br/>
show_label = рдЧрд▓рдд ) , <br/>
рдУрд░рд┐рдПрдВрдЯреЗрд╢рди = "рд╡рд░реНрдЯрд┐рдХрд▓" ) , <br/>
resizable = True <br/>
) <br/>
<br/>
def _plot_default ( self ) : <br/>
# рдХрдВрдЯреЗрдирд░ / рдЧреНрд░рд╛рдлрд╝ рдЬреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ <br/>
рд╡рд╛рдкрд╕реА _create_plot_component ( ) <br/>
<br/>
# рдЙрд╕ рдорд╛рдирдХ рд╡рд┐рдВрдбреЛ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХрд░реЗрдВ рдЬрд┐рд╕рдореЗрдВ рд░реЗрдЦрд╛рдВрдХрди рдЦреАрдВрдЪреЗ рдЧрдП рд╣реИрдВред <br/>
#рдХреНрд▓рд╛рд╕ рдкреНрд▓реЙрдЯрдлрд╝реНрд░реЗрдо (рдбреЗрдореЛрдлреНрд░реЗрдо): <br/>
# <br/>
# def _create_window (рд╕реНрд╡): <br/>
# # рдПрдХ рд╡рд┐рдВрдбреЛ рдмрдирд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд░реЗрдЦрд╛рдВрдХрди рдбреНрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП <br/>
# рд░рд┐рдЯрд░реНрди рд╡рд┐рдВрдбреЛ (рд╕реНрд╡рдпрдВ, -1, рдШрдЯрдХ = _create_plot_component ()) <br/>
<br/>
рд╡рд░реНрдЧ ChacoQWidget ( QtGuiред QWidget ) : <br/>
def __init__ ( рд╕реНрд╡ , рдорд╛рддрд╛-рдкрд┐рддрд╛ = рдХреЛрдИ рдирд╣реАрдВ ) : <br/>
QtGuiред QWidget ред __in___ ( рд╕реНрд╡ , рдорд╛рддрд╛-рдкрд┐рддрд╛ ) <br/>
рд▓реЗрдЖрдЙрдЯ = QtGuiред QVBoxLayout ( рд╕реНрд╡ ) <br/>
рдлреНрд░реЗрдо = рдбреЗрдореЛ ( ) <br/>
# рдЕрдм рд╣рдореЗрдВ рдПрдХ рд╡рд┐рдЬреЗрдЯ рдмрдирд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╣рдо рдХрдВрдЯреНрд░реЛрд▓ рдлрдВрдХреНрд╢рди рдХреЛ <br/> рдХрд╣рддреЗ рд╣реИрдВ
# рдЬрд╛рджреВ рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ :) <br/>
рдЙрдИ = рдврд╛рдБрдЪрд╛ред edit_traits ( рдЬрдирдХ = рд╕реНрд╡ , рджрдпрд╛рд▓реБ = 'рдЙрдкрдкреНрд░рд╛рдг' ) ред рдирд┐рдпрдВрддреНрд░рдг <br/>
рд▓реЗрдЖрдЙрдЯред addWidget ( ui ) <br/>
рд▓реЗрдЖрдЙрдЯред addWidget ( QtGuiред QPushButton ( "рд╣реЗрд▓реЛ рд╣рдмреНрд░рд╣реНрд░рдм " ) ) <br/>
<br/>
рдЕрдЧрд░ __name__ == "__main__" : <br/>
#demo_main (рдкреНрд▓реЙрдЯрдлрд╝реНрд░реЗрдо, рдЖрдХрд╛рд░ = (800, 600), рд╢реАрд░реНрд╖рдХ = "рд╡рд┐рддреНрддреАрдп рдкреНрд▓реЙрдЯ рдЙрджрд╛рд╣рд░рдг" <br )>
app = QtGuiред рдкреНрд░рд╢реНрдиреЛрддреНрддрд░ ред рдЙрджрд╛рд╣рд░рдг ( ) <br/>
w = ChacoQWidget ( ) <br/>
рдбрдмреНрд▓реНрдпреВред рдЖрдХрд╛рд░ ( 800 , 600 ) <br/>
рдбрдмреНрд▓реНрдпреВред рд╢реЛ ( ) <br/>
рдПрдкреНрд▓рд┐рдХреЗрд╢рдиред рдирд┐рд╖реНрдкрд╛рджрд┐рдд_ ( )
рдЧреНрд░рд╛рдлрд╝ рдХреЗ рд▓рд┐рдП рд░рдВрдЧреЛрдВ рдХрд╛ рдЪрдпрди (рдореИрдВ рдПрдиреАрдореЗрд╢рди рд▓рд╛рдЧреВ рдХрд░реВрдБрдЧрд╛, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдорд╛рдЙрд╕ рд╕реНрдХреНрд░реЙрд▓ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕рдм рдХреБрдЫ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ):

numpy рдЖрдпрд╛рдд arange рд╕реЗ, exp, рд╕реЙрд░реНрдЯ <br/>
рд╕реБрдиреНрди рд╕реЗред рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЖрдпрд╛рдд рдпрд╛рджреГрдЪреНрдЫрд┐рдХ <br/>
рд╕рдХреНрд╖рдо рд╕реЗред example_support рдЖрдпрд╛рдд DemoFrame, Demo_main <br/>
рд╕рдХреНрд╖рдо рд╕реЗред рдПрдкреАрдЖрдИ рдЖрдпрд╛рдд рдШрдЯрдХ, рдШрдЯрдХ рд╕рдВрдзрд╛рд░рд┐рддреНрд░, рд╡рд┐рдВрдбреЛ <br/>
рд▓рдХреНрд╖рдгреЛрдВ рд╕реЗред рдПрдкреАрдЖрдИ рдЖрдпрд╛рдд рд╣реИрдЯреНрд░реЗрдЯреНрд╕, рдЗрдВрд╕реНрдЯреЗрдВрд╕ <br/>
рдЯреНрд░рд┐рдЯреАрд╕реБрдИ рд╕реЗред рдПрдкреАрдЖрдИ рдЖрдпрд╛рдд рдЖрдЗрдЯрдо, рд╕рдореВрд╣, рджреЗрдЦреЗрдВ <br/>
рдЪрд╛рдХреЛ рд╕реЗред рдПрдкреАрдЖрдИ рдЖрдпрд╛рдд ArrayPlotData, ColorBar, \ <br/>
ColormappedSelectionOverlay, HPlotContainer, \ <br/>
рдЬреЗрдЯ, рд▓реАрдирд┐рдпрд░рдореИрдкрд░, рдкреНрд▓реЙрдЯ, рдЬрд┐рд╕реНрдЯ_рдЕрд░реНрде <br/>
рдЪрд╛рдХреЛ рд╕реЗред рдЙрдкрдХрд░рдг ред рдПрдкреАрдЖрдИ рдЖрдпрд╛рдд рдкреИрдирдЯреВрд▓, рдЬреВрдордЯреВрд▓, рд░реЗрдВрдЬрд╕реЗрд▓реЗрдХреНрд╢рди, \ <br/>
RangeSelectionOverlay <br/>
<br/>
# ==================================================== ================================ <br/>
# # рдЪрд╛рдХреЛ рдХреА рд╕рд╛рдЬрд┐рд╢ рд░рдЪреЗрдВред <br/>
# ==================================================== ================================ <br/>
def _create_plot_component ( ) : <br/>
<br/>
# рдХреБрдЫ рдбреЗрдЯрд╛ рдмрдирд╛рдПрдВ <br/>
рд╕рдВрдЦреНрдпрд╛ = 1000 <br/>
x = рд╕реЙрд░реНрдЯ ( рдпрд╛рджреГрдЪреНрдЫрд┐рдХ ( рдЕрдВрдХ ) ) <br/>
y = рдпрд╛рджреГрдЪреНрдЫрд┐рдХ ( рдЕрдВрдХ ) <br/>
color = exp ( - ( x ** 2 + y ** 2 ) ) <br/>
<br/>
# рдПрдХ рднреВрдЦрдВрдб рдбреЗрдЯрд╛ рдЕрд╡рд░реЛрдз рдмрдирд╛рдПрдБ рдФрд░ рдЗрд╕реЗ рдпрд╣ рдбреЗрдЯрд╛ рджреЗрдВ <br/>
pd = ArrayPlotData ( ) <br/>
рдкреАрдбреАред set_data ( "рдЗрдВрдбреЗрдХреНрд╕" , x ) <br/>
рдкреАрдбреАред set_data ( "рдорд╛рди" , y ) <br/>
рдкреАрдбреАред set_data ( "рд░рдВрдЧ" , рд░рдВрдЧ ) <br/>
<br/>
# рдкреНрд▓реЙрдЯ рдмрдирд╛рдПрдВ <br/>
рдкреНрд▓реЙрдЯ = рдкреНрд▓реЙрдЯ ( рдкреАрдбреА ) <br/>
рд╕рд╛рдЬрд┐рд╢ред рдкреНрд▓реЙрдЯ ( "рдЗрдВрдбреЗрдХреНрд╕" , "рд╡реИрд▓реНрдпреВ" , "рдХрд▓рд░" ) , <br/>
рдкреНрд░рдХрд╛рд░ = "cmap_scatter" , <br/>
рдирд╛рдо = "my_plot" , <br/>
color_mapper = gist_earth, <br/>
рдорд╛рд░реНрдХрд░ = "рд╡рд░реНрдЧ" , <br/>
fill_alpha = 0.5 , <br/>
рдорд╛рд░реНрдХрд░_рд╕рд╛рдЗрдЬрд╝ = 8 , <br/>
outline_color = "рдмреНрд▓реИрдХ" , <br/>
рдмреЙрд░реНрдбрд░_рд╡рд┐рдЬрдп = рд╕рддреНрдп , <br/>
bgcolor = "рд╡реНрд╣рд╛рдЗрдЯ" ) <br/>
<br/>
# рдХрдерд╛рдирдХ рдХреЗ рдХреБрдЫ рдЧреБрдгреЛрдВ рдХреЛ рдореЛрдбрд╝ рджреЗрдВ <br/>
рд╕рд╛рдЬрд┐рд╢ред рд╢реАрд░реНрд╖рдХ = "рдкреИрди / рдЬрд╝реВрдо рдХрд▓рд░ рдмрд╛рд░" <br/> рдХреЗ рд╕рд╛рде рдХреЙрд▓рд░реНрдореНрдб рд╕реНрдХреИрдЯрд░ рдкреНрд▓реЙрдЯ
рд╕рд╛рдЬрд┐рд╢ред рдЧрджреНрджреА = 50 <br/>
рд╕рд╛рдЬрд┐рд╢ред x_grid рджреГрд╢реНрдпрдорд╛рди = рдЧрд▓рдд <br/>
рд╕рд╛рдЬрд┐рд╢ред y_grid рджреГрд╢реНрдпрдорд╛рди = рдЧрд▓рдд <br/>
рд╕рд╛рдЬрд┐рд╢ред x_axis ред рдлрд╝реЙрдиреНрдЯ = "рдЖрдзреБрдирд┐рдХ 16" <br/>
рд╕рд╛рдЬрд┐рд╢ред y_axis рдлрд╝реЙрдиреНрдЯ = "рдЖрдзреБрдирд┐рдХ 16" <br/>
<br/>
# рдкреИрди рдЬреЛрдбрд╝реЗрдВ рдФрд░ рднреВрдЦрдВрдб рдкрд░ рдЬрд╝реВрдо рдХрд░реЗрдВ <br/>
рд╕рд╛рдЬрд┐рд╢ред рдЙрдкрдХрд░рдг ред append ( PanTool ( рднреВрдЦрдВрдб, рд╡рд┐рд╡рд╢_ = "рдмрджрд▓рд╛рд╡" ) ) <br/>
рдЬрд╝реВрдо = рдЬрд╝реВрдордЯреВрд▓ ( рдкреНрд▓реЙрдЯ ) <br/>
рд╕рд╛рдЬрд┐рд╢ред рдУрд╡рд░рд▓реЗ ред рдкрд░рд┐рд╢рд┐рд╖реНрдЯ ( рдЬрд╝реВрдо ) <br/>
<br/>
# рдЙрдкрдпреБрдХреНрдд рд░реЗрдВрдЬ рдФрд░ рдХреЛрд▓рд░рдореИрдк <br/> рдореЗрдВ рд╣реИрдВрдбрд▓рдмрд╛рд░ рдХреЛ рдХрд▓рд░рдмрд╛рд░ рдмрдирд╛рдПрдВ
colorbar = ColorBar ( index_mapper = LinearMapper ( рд╢реНрд░реЗрдгреА = рд╕рд╛рдЬрд┐рд╢ред color_mapper ред рд╢реНрд░реЗрдгреА ) , <br/>ред
color_mapper = рдХрдерд╛рдирдХред color_mapper , <br/>
рдУрд░рд┐рдПрдВрдЯреЗрд╢рди = 'v' , <br/>
resizable = 'v' , <br/>
рдЪреМрдбрд╝рд╛рдИ = 30 , <br/>
рдЧрджреНрджреА = 20 ) <br/>
colorbarред рдкреНрд▓реЙрдЯ = рдкреНрд▓реЙрдЯ <br/>
colorbarред рдкреЗрдбрд┐рдВрдЧ_рдЯреЙрдк = рдкреНрд▓реЙрдЯред рдкреЗрдбрд┐рдВрдЧ_рдЯреЙрдк <br/>
colorbarред рдкреЗрдбрд┐рдВрдЧ_рдмреЙрдЯрдо = рдкреНрд▓реЙрдЯред рдкреЗрдбрд┐рдВрдЧ_рдмреЙрдЯрдо <br/>
<br/>
# рдХрд▓рд░рдмрд╛рд░ <br/> рдореЗрдВ рдкреИрди рдФрд░ рдЬреВрдо рдЯреВрд▓ рдЬреЛрдбрд╝реЗрдВ
colorbarред рдЙрдкрдХрд░рдг ред append ( PanTool ( colorbar, constrain_direction = "y" , constrain = True ) ) <br/>
zoom_overlay = ZoomTool ( colorbar, axis = "index" , tool_mode = "range" , <br/>
always_on = True , drag_button = "рджрд╛рдПрдБ" ) <br/>
colorbarред рдУрд╡рд░рд▓реЗ ред рдкрд░рд┐рд╢рд┐рд╖реНрдЯ ( zoom_overlay ) <br/>
<br/>
# рдкреНрд▓реЙрдЯ рдФрд░ рдХрд▓рд░рдмрд╛рд░ рдХреЛ рд╕рд╛рде-рд╕рд╛рде рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдВрдЯреЗрдирд░ рдмрдирд╛рдПрдВ <br/>
рдХрдВрдЯреЗрдирд░ = HPlotContainer ( рдкреНрд▓реЙрдЯ, рдХрд▓рд░рдмрд╛рд░, use_backbuffer = True , bgcolor = " lightgray " ) <br/>
<br/>
рд╡рд╛рдкрд╕реА рдХрдВрдЯреЗрдирд░ <br/>
<br/>
# ==================================================== ================================ <br/>
# рдкреНрд▓реЙрдЯ рджреГрд╢реНрдп рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБред <br/>
рдЖрдХрд╛рд░ = ( 650 , 650 ) <br/>
рд╢реАрд░реНрд╖рдХ = "рдЧреЛрд▓рдорд╛рд▓ рдмрд┐рдЦреЗрд░рдиреЗ рдХреА рд╕рд╛рдЬрд┐рд╢" <br/>
<br/>
# ==================================================== ================================ <br/>
# # рдбреЗрдореЛ рдХреНрд▓рд╛рд╕ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдбреЗрдореЛрдХреНрд░реЛрдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред <br/>
# ==================================================== ================================ <br/>
рд╡рд░реНрдЧ рдбреЗрдореЛ ( HasTraits ) : <br/>
рдкреНрд▓реЙрдЯ = рдЗрдВрд╕реНрдЯреЗрдВрд╕ ( рдШрдЯрдХ ) <br/>
<br/>
traits_view = рджреГрд╢реНрдп ( <br/>)
рд╕рдореВрд╣ ( <br/>
рдЖрдЗрдЯрдо ( 'рдкреНрд▓реЙрдЯ' , рд╕рдВрдкрд╛рджрдХ = рдХрдВрдкреЛрдиреЗрдВрдЯ рдПрдбрд┐рдЯрд░ ( рдЖрдХрд╛рд░ = рдЖрдХрд╛рд░ ) , <br/>
show_label = рдЧрд▓рдд ) , <br/>
рдУрд░рд┐рдПрдВрдЯреЗрд╢рди = "рд╡рд░реНрдЯрд┐рдХрд▓" ) , <br/>
resizable = true , рд╢реАрд░реНрд╖рдХ = рд╢реАрд░реНрд╖рдХ <br/>
) <br/>
<br/>
def _plot_default ( self ) : <br/>
рд╡рд╛рдкрд╕реА _create_plot_component ( ) <br/>
<br/>
рдбреЗрдореЛ = рдбреЗрдореЛ ( ) <br/>
<br/>
# ==================================================== ================================ <br/>
# рдкреНрд▓реЙрдЯ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреИрдВрдб-рдЕрд▓реЛрди рдлреНрд░реЗрдоред <br/>
# ==================================================== ================================ <br/>
рд╡рд░реНрдЧ рдкреНрд▓реЙрдЯрдлрд╝реНрд░реЗрдо ( рдбреЗрдореЛрдлреНрд░реЗрдо ) : <br/>
<br/>
def _create_window ( рд╕реНрд╡ ) : <br/>
# рд╣рдорд╛рд░реЗ рднреВрдЦрдВрдбреЛрдВ рд╡рд╛рд▓реА рдПрдХ рдЦрд┐рдбрд╝рдХреА рд▓реМрдЯреЗрдВ <br/>
рд╡рд╛рдкрд╕реА рдЦрд┐рдбрд╝рдХреА ( рд╕реНрд╡рдпрдВ , - 1 , рдШрдЯрдХ = _create_plot_component ( ) ) <br/>
<br/>
рдЕрдЧрд░ __name__ == "__main__" : <br/>
Demo_main ( рдкреНрд▓реЙрдЯрдлрд╝реНрд░реЗрдо, рдЖрдХрд╛рд░ = рдЖрдХрд╛рд░, рд╢реАрд░реНрд╖рдХ = рд╢реАрд░реНрд╖рдХ )
рдзреНрд░реБрд╡реАрдп рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдореЗрдВ рд░реЗрдЦрд╛рдВрдХрди:

рдХреЛрдб:
рдЦрд╕рдЦрд╕ рд╕реЗ рдЖрдпрд╛рдд arange, рдкреА, рдкрд╛рдк, cos <br/>
рдЙрддреНрд╕рд╛рд╣ рд╕реЗред рд╕рдХреНрд╖рдо рдХрд░реЗрдВ ред example_support рдЖрдпрд╛рдд DemoFrame, Demo_main <br/>
рдЙрддреНрд╕рд╛рд╣ рд╕реЗред рд╕рдХреНрд╖рдо рдХрд░реЗрдВ ред рдПрдкреАрдЖрдИ рдЖрдпрд╛рдд рд╡рд┐рдВрдбреЛ <br/>
рдЙрддреНрд╕рд╛рд╣ рд╕реЗред рд▓рдХреНрд╖рдг ред рдПрдкреАрдЖрдИ рдЖрдпрд╛рдд рдЧрд▓рдд <br/>
рдЙрддреНрд╕рд╛рд╣ рд╕реЗред рдЪрд╛рдХреЛ ред рдПрдкреАрдЖрдИ рдЖрдпрд╛рдд create_polar_plot <br/>
<br/>
рд╡рд░реНрдЧ MyFrame ( DemoFrame ) : <br/>
def _create_window ( рд╕реНрд╡ ) : <br/>
рд╕рдВрдЦреНрдпрд╛ = 5000 <br/>
рдХрдо = 0 <br/>
high = pi * 2 <br/>
рдереАрдЯрд╛ = рдЕрд░реЗрдВрдЬ ( рдирд┐рдореНрди, рдЙрдЪреНрдЪ, ( рдЙрдЪреНрдЪ-рдирд┐рдореНрди ) / рдЕрдВрдХ ) <br/>
рддреНрд░рд┐рдЬреНрдпрд╛ = рдкрд╛рдк ( рдереАрдЯрд╛ * 3 ) <br/>
<br/>
рдкреНрд▓реЙрдЯ = create_polar_plot ( ( рддреНрд░рд┐рдЬреНрдпрд╛, рдереАрдЯрд╛ ) , рд░рдВрдЧ = ( 0.0 , 0.0 , 1.0 , 1 ) , рдЪреМрдбрд╝рд╛рдИ = 4.0 ) <br/>
рд╕рд╛рдЬрд┐рд╢ред bgcolor = "рд╕рдлреЗрдж" <br/>
рд╡рд╛рдкрд╕реА рдЦрд┐рдбрд╝рдХреА ( рд╕реНрд╡рдпрдВ , - 1 , рдШрдЯрдХ = рдкреНрд▓реЙрдЯ ) <br/>
<br/>
рдЕрдЧрд░ __name__ == "__main__" : <br/>
рдбреЗрдореЛ_рдореИрди ( MyFrame, рдЖрдХрд╛рд░ = ( 600 , 600 ) , рд╢реАрд░реНрд╖рдХ = "рд╕рд░рд▓ рдзреНрд░реБрд╡реАрдп рдкреНрд▓реЙрдЯ" )
рд╡рд┐рднрд┐рдиреНрди рдмрд╣реБрднреБрдЬ:

рдЖрдпрд╛рдд рдЧрдгрд┐рдд <br/>
рд╕реБрдиреНрди рдЖрдпрд╛рдд рд╕рд░рдгреА рд╕реЗ , рд╕реНрдерд╛рдирд╛рдВрддрд░рдг <br/>
рд╕рдХреНрд╖рдо рд╕реЗред example_support рдЖрдпрд╛рдд DemoFrame, Demo_main <br/>
рд╕рдХреНрд╖рдо рд╕реЗред рдПрдкреАрдЖрдИ рдЖрдпрд╛рдд рдШрдЯрдХ, рдШрдЯрдХ рд╕рдВрдзрд╛рд░рд┐рддреНрд░, рд╡рд┐рдВрдбреЛ <br/>
рд▓рдХреНрд╖рдгреЛрдВ рд╕реЗред рдПрдкреАрдЖрдИ рдЖрдпрд╛рдд рд╣реИрдЯреНрд░реЗрдЯреНрд╕, рдЗрдВрд╕реНрдЯреЗрдВрд╕, рдПрдирдо, рдХреИрд░реЗ, рдбрд┐рдХреНрдЯ <br/>
рдЯреНрд░рд┐рдЯрд╕реБрдИ рд╕реЗред рдПрдкреАрдЖрдИ рдЖрдпрд╛рдд рдЖрдЗрдЯрдо, рд╕рдореВрд╣, рджреЗрдЦреЗрдВ <br/>
рдЪрд╛рдХреЛ рд╕реЗред рдПрдкреАрдЖрдИ рдЖрдпрд╛рдд ArrayPlotData, HPlotContainer, рдкреНрд▓реЙрдЯ <br/>
рдЪрд╛рдХреЛ рд╕реЗред рдЖрдзрд╛рд░ рдЖрдпрд╛рдд n_gon <br/>
рдЪрд╛рдХреЛ рд╕реЗред рдЙрдкрдХрд░рдг ред рдПрдкреАрдЖрдИ рдЖрдпрд╛рдд рдкреИрдирдЯреВрд▓, рдЬреВрдордЯреВрд▓, рдбреНрд░реИрдЧрдЯреВрд▓ <br/>
<br/>
рдХреНрд▓рд╛рд╕ рдбрд╛рдЯрд╛рдкреЗрд╕рдореЛрд╡рдЯреВрд▓ ( рдбреНрд░реИрдЧрдЯреВрд▓ ) : <br/>
"" "<br/>
рдПрдХ рднреВрдЦрдВрдб рдХреЗ рдбреЗрдЯрд╛ рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддрд╛ рд╣реИред рдХреЗрд╡рд▓ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ <br/>
BaseXYPlot рдпрд╛ рдЙрд╕рдХреЗ рдЙрдкрд╡рд░реНрдЧ <br/> рдХреЗ рдЖрдзрд╛рд░ рдкрд░
"" " <br/>
<br/>
event_state = Enum ( "рд╕рд╛рдорд╛рдиреНрдп" , "рдЦреАрдВрдЪрдирд╛" ) <br/>
_prev_pt = CArray <br/>
<br/>
def_draggable ( рд╕реНрд╡ , x, y ) : <br/> рд╣реИ
рд╕реНрд╡ рд▓реМрдЯ рдЖрдУ ред рдШрдЯрдХ ред hittest ( ( x, y ) ) <br/>
<br/>
def drag_start ( self , event ) : <br/>
data_pt = рд╕реНрд╡ ред рдШрдЯрдХ ред map_data ( ( event.x, event.y ) , all_values тАЛтАЛ= True ) <br/>
self ._prev_pt = data_pt <br/>
рдШрдЯрдирд╛ред рд╕рдВрднрд╛рд▓рд╛ = рд╕рдЪ <br/>
<br/>
def рдбреНрд░реИрдЧрд┐рдВрдЧ ( рд╕реНрд╡ , рдИрд╡реЗрдВрдЯ ) : <br/>
рдХрдерд╛рдирдХ = рд╕реНрд╡ ред рдШрдЯрдХ <br/>
cur_pt = рдХрдерд╛рдирдХред map_data ( ( event.x, event.y ) , all_values тАЛтАЛ= True ) <br/>
dx = cur_pt [ 0 ] - self._prev_pt [ 0 ] <br/>
dy = cur_pt [ 1 ] - self__prev_pt [ 1 ] <br/>
рд╕реВрдЪрдХрд╛рдВрдХ = рдХрдерд╛рдирдХред рд╕реВрдЪрдХрд╛рдВрдХ ред get_data ( ) + dx <br/>
рдореВрд▓реНрдп = рдХрдерд╛рдирдХред рдорд╛рди ред get_data ( ) + рдбрд╛рдИ <br/>
рд╕рд╛рдЬрд┐рд╢ред рд╕реВрдЪрдХрд╛рдВрдХ ред set_data ( рдЗрдВрдбреЗрдХреНрд╕, рд╕реЙрд░реНрдЯ_рдСрд░реНрдбрд░ = рдкреНрд▓реЙрдЯред рдЗрдВрдбреЗрдХреНрд╕ ред рд╕реЙрд░реНрдЯ_рдСрд░реНрдбрд░ ) <br/>
рд╕рд╛рдЬрд┐рд╢ред рдорд╛рди ред set_data ( рдорд╛рди, рд╕реЙрд░реНрдЯ_рдСрд░реНрдбрд░ = рдкреНрд▓реЙрдЯред рдорд╛рди ред рд╕реЙрд░реНрдЯ_рдСрд░реНрдбрд░ ) <br/>
self ._prev_pt = cur_pt <br/>
рдШрдЯрдирд╛ред рд╕рдВрднрд╛рд▓рд╛ = рд╕рдЪ <br/>
рд╕рд╛рдЬрд┐рд╢ред request_redraw ( ) <br/>
<br/>
<br/>
# ==================================================== ================================ <br/>
# # рдЪрд╛рдХреЛ рдХреА рд╕рд╛рдЬрд┐рд╢ рд░рдЪреЗрдВред <br/>
# ==================================================== ================================ <br/>
def _create_plot_component ( ) : <br/>
<br/>
# рд╣рдорд╛рд░реЗ рдмрд╣реБрднреБрдЬ <br/> рдХреЗ рд▓рд┐рдП рдХреЗрдВрджреНрд░ рд╕реНрдерд╛рдиреЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП n_gon рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
рдЕрдВрдХ = n_gon ( рдХреЗрдВрджреНрд░ = ( 0 , 0 ) , r = 4 , nsides = <br ) < br/>
<br/>
# рд╣рдорд╛рд░реЗ рдмрд╣реБрднреБрдЬ <br/> рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд░рдВрдЧреЛрдВ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ
рд░рдВрдЧ = { 3 : 0xabbcc, 4 : 'рдирд╛рд░рдВрдЧреА' , 5 : 'рдкреАрд▓рд╛' , 6 : 'рд▓рд╛рдЗрдЯрдЧреНрд░реАрди' , <br/>
7 : 'рдЧреНрд░реАрди' , 8 : 'рдмреНрд▓реВ' , 9 : 'рд▓реИрд╡реЗрдВрдбрд░' , 10 : 'рдкрд░реНрдкрд▓' } <br/>
<br/>
# рдмрд╣реБрднреБрдЬ рдбреЗрдЯрд╛ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд▓реЙрдЯрдбрд╛рдЯрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ <br/>
pd = ArrayPlotData ( ) <br/>
<br/>
# рдирд┐рдпрдорд┐рдд рдмрд╣реБрднреБрдЬ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрднреБрдЬ рдкреНрд▓реЙрдЯ рдмрдирд╛рдПрдВ <br/>
рдкреЙрд▓рд┐рдкреНрд▓реЙрдЯ = рдкреНрд▓реЙрдЯ ( рдкреАрдбреА ) <br/>
<br/>
# рдкреНрд░рддреНрдпреЗрдХ рдмрд╣реБрднреБрдЬ рдХреЗ рд▓рд┐рдП рдкрде рдбреЗрдЯрд╛ рд╕реНрдЯреЛрд░ рдХрд░реЗрдВ, рдФрд░ <br/> рдкреНрд▓реЙрдЯ рдХрд░реЗрдВ
nsides = 3 <br/>
рдЕрдВрдХ рдореЗрдВ p рдХреЗ рд▓рд┐рдП : <br/>
npoint = n_gon ( рдХреЗрдВрджреНрд░ = p, r = 2 , nsides = nsides ) <br/>
nxarray, nyarray = transpose ( npoint ) <br/>
рдкреАрдбреАред set_data ( "x" + str ( nsides ) , nxarray ) <br/>
рдкреАрдбреАред set_data ( "y" + str ( nsides ) , nyarray ) <br/>
рдкреНрд▓реЙрдЯ = рдкреЙрд▓реАрдкреЛрдЯред рдкреНрд▓реЙрдЯ ( "x" + str ( nsides ) , "y" + str ( nsides ) ) , <br/>
рдкреНрд░рдХрд╛рд░ = "рдмрд╣реБрднреБрдЬ" , <br/>
face_color = рд░рдВрдЧ [ nsides ] , <br/>
hittest_type = "poly" ) [ 0 ] <br/>
рд╕рд╛рдЬрд┐рд╢ред рдЙрдкрдХрд░рдг ред рдкрд░рд┐рд╢рд┐рд╖реНрдЯ ( DataspaceMoveTool ( рдкреНрд▓реЙрдЯ, рдбреНрд░реИрдЧ_рдмрдЯрди = "рд╕рд╣реА" ) ) <br/>
nsides = nsides + 1 <br/>
<br/>
# рдХрдерд╛рдирдХ рдХреЗ рдХреБрдЫ рдЧреБрдгреЛрдВ рдХреЛ рдореЛрдбрд╝ рджреЗрдВ <br/>
polyplotред рдЧрджреНрджреА = 50 <br/>
polyplotред рд╢реАрд░реНрд╖рдХ = "рдмрд╣реБрднреБрдЬ рдкреНрд▓реЙрдЯ" <br/>
<br/>
# рднреВрдЦрдВрдб рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЙрдкрдХрд░рдг рд╕рдВрд▓рдЧреНрди рдХрд░реЗрдВ <br/>
polyplotред рдЙрдкрдХрд░рдг ред рдкрд░рд┐рд╢рд┐рд╖реНрдЯ ( PanTool ( рдкреЙрд▓реАрдкреНрд▓реЙрдЯ ) ) <br/>
рдЬрд╝реВрдо = рдЬрд╝реВрдордЯреВрд▓ ( рдкреЙрд▓реАрдкреЛрдЯ, рдЯреВрд▓_рдореЛрдб = "рдмреЙрдХреНрд╕" , рд╣рдореЗрд╢рд╛_рдУрди = рдЧрд▓рдд ) <br/>
polyplotред рдУрд╡рд░рд▓реЗ ред рдкрд░рд┐рд╢рд┐рд╖реНрдЯ ( рдЬрд╝реВрдо ) <br/>
<br/>
рдкреЙрд▓рд┐рдкреНрд▓реЙрдЯ <br/> рд╡рд╛рдкрд╕ рдХрд░реЗрдВ
<br/>
# ==================================================== ================================ <br/>
# рдкреНрд▓реЙрдЯ рджреГрд╢реНрдп рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБред <br/>
рдЖрдХрд╛рд░ = ( 800 , 800 ) <br/>
рд╢реАрд░реНрд╖рдХ = "рдмрд╣реБрднреБрдЬ рдкреНрд▓реЙрдЯ" <br/>
<br/>
# ==================================================== ================================ <br/>
# # рдбреЗрдореЛ рдХреНрд▓рд╛рд╕ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдбреЗрдореЛрдХреНрд░реЛрдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред <br/>
# ==================================================== ================================ <br/>
рд╡рд░реНрдЧ рдбреЗрдореЛ ( HasTraits ) : <br/>
рдкреНрд▓реЙрдЯ = рдЗрдВрд╕реНрдЯреЗрдВрд╕ ( рдШрдЯрдХ ) <br/>
<br/>
traits_view = рджреГрд╢реНрдп ( <br/>)
рд╕рдореВрд╣ ( <br/>
рдЖрдЗрдЯрдо ( 'рдкреНрд▓реЙрдЯ' , рд╕рдВрдкрд╛рджрдХ = рдХрдВрдкреЛрдиреЗрдВрдЯ рдПрдбрд┐рдЯрд░ ( рдЖрдХрд╛рд░ = рдЖрдХрд╛рд░ ) , <br/>
show_label = рдЧрд▓рдд ) , <br/>
рдУрд░рд┐рдПрдВрдЯреЗрд╢рди = "рд╡рд░реНрдЯрд┐рдХрд▓" ) , <br/>
resizable = true , рд╢реАрд░реНрд╖рдХ = рд╢реАрд░реНрд╖рдХ <br/>
) <br/>
<br/>
def _plot_default ( self ) : <br/>
рд╡рд╛рдкрд╕реА _create_plot_component ( ) <br/>
<br/>
рдбреЗрдореЛ = рдбреЗрдореЛ ( ) <br/>
<br/>
# ==================================================== ================================ <br/>
# рдкреНрд▓реЙрдЯ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреИрдВрдб-рдЕрд▓реЛрди рдлреНрд░реЗрдоред <br/>
# ==================================================== ================================ <br/>
рд╡рд░реНрдЧ рдкреНрд▓реЙрдЯрдлрд╝реНрд░реЗрдо ( рдбреЗрдореЛрдлреНрд░реЗрдо ) : <br/>
<br/>
def _create_window ( рд╕реНрд╡ ) : <br/>
# рд╣рдорд╛рд░реЗ рднреВрдЦрдВрдбреЛрдВ рд╡рд╛рд▓реА рдПрдХ рдЦрд┐рдбрд╝рдХреА рд▓реМрдЯреЗрдВ <br/>
рд╡рд╛рдкрд╕реА рдЦрд┐рдбрд╝рдХреА ( рд╕реНрд╡рдпрдВ , - 1 , рдШрдЯрдХ = _create_plot_component ( ) ) <br/>
<br/>
рдЕрдЧрд░ __name__ == "__main__" : <br/>
Demo_main ( рдкреНрд▓реЙрдЯрдлрд╝реНрд░реЗрдо, рдЖрдХрд╛рд░ = рдЖрдХрд╛рд░, рд╢реАрд░реНрд╖рдХ = рд╢реАрд░реНрд╖рдХ )
рдПрдХреНрд╕-рд░реЗ:

__future__ рд╕реЗ рдЖрдпрд╛рдд рдХрд░реЗрдВ with_statement <br/>
рдЖрдпрд╛рдд рд╕реБрдиреНрди <br/>
рд▓рдХреНрд╖рдгреЛрдВ рд╕реЗред рдПрдкреАрдЖрдИ рдЖрдпрд╛рдд рд╣реИрдЯреНрд░реЗрдЯреНрд╕, рдЗрдВрд╕реНрдЯреЗрдВрд╕, Enum <br/>
рдЯреНрд░рд┐рдЯреАрд╕реБрдИ рд╕реЗред рдПрдкреАрдЖрдИ рдЖрдпрд╛рдд рджреЗрдЦреЗрдВ, рдЖрдЗрдЯрдо <br/>
рд╕рдХреНрд╖рдо рд╕реЗред рдПрдкреАрдЖрдИ рдЖрдпрд╛рдд рдШрдЯрдХ рдИ-рдХреЙрдорд░реНрд╕ <br/>
рдЪрд╛рдХреЛ рд╕реЗред рдПрдкреАрдЖрдИ рдЖрдпрд╛рдд рдкреНрд▓реЙрдЯ, ArrayPlotData, AbstractOverlay <br/>
рд╕рдХреНрд╖рдо рд╕реЗред рдПрдкреАрдЖрдИ рдЖрдпрд╛рдд рдмреЗрд╕рдЯреВрд▓ <br/>
рд╕рдХреНрд╖рдо рд╕реЗред рдорд╛рд░реНрдХрд░ DOT_MARKER, DotMarker <br/> рдЖрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВ
<br/>
рд╡рд░реНрдЧ BoxSelectTool ( рдмреЗрд╕рдЯреВрд▓ ) : <br/>
"" "рдмреЙрдХреНрд╕ рдХреЗ рд╕рднреА рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдЪреБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдЯреВрд▓ <br/>
<br/>
рдЗрд╕ рдЙрдкрдХрд░рдг рдХреЗ рд▓рд┐рдП 2 рд░рд╛рдЬреНрдп рд╣реИрдВ, рд╕рд╛рдорд╛рдиреНрдп рдФрд░ рдЪрдпрдиред рдЬрдмрдХрд┐ <br/>
рдмрд╛рдИрдВ рдорд╛рдЙрд╕ рдмрдЯрди рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдиреАрдЪреЗ рд╣реИ рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рдкрд░ <br/> рд╣реЛрдЧрд╛
рд╡рд░реНрддрдорд╛рди рдЪрдпрдирд┐рдд рд╕реАрдорд╛ рдХреЗ рд╕рд╛рде рдЕрджреНрдпрддрди рдХрд┐рдпрд╛ рдЧрдпрд╛ред <br/>
<br/>
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЙрдкрдХрд░рдг рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЪрдпрдирд┐рдд рдмрд┐рдВрджреБ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди <br/>
рдмреЙрдХреНрд╕ рдХреА рд╕реАрдорд╛ред <br/>
"" " <br/>
<br/>
event_state = Enum ( "рд╕рд╛рдорд╛рдиреНрдп" , "рдЪрдпрди" ) <br/>
<br/>
def normal_left_down ( рд╕реНрд╡рдпрдВ , рдШрдЯрдирд╛ ) : <br/>
рд╕реНрд╡ ред event_state = "рдЪрдпрди" <br/>
рд╕реНрд╡ ред select_mouse_move ( рдШрдЯрдирд╛ ) <br/>
<br/>
def select_left_up ( рд╕реНрд╡рдпрдВ , рдИрд╡реЗрдВрдЯ ) : <br/>
рд╕реНрд╡ ред event_state = "рд╕рд╛рдорд╛рдиреНрдп" <br/>
<br/>
def_mouse_move ( рд╕реНрд╡рдпрдВ , рдШрдЯрдирд╛ ) рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ: <br/>
рдПрдХреНрд╕ 1, рд╡рд╛рдИ 1 = рд╕реНрд╡ ред map_to_data ( event.x - 25 , event.y - 25 ) <br/>
x2, y2 = рд╕реНрд╡ ред map_to_data ( рдШрдЯрдирд╛ред x + 25 , рдШрдЯрдирд╛ред y + 25 ) <br/>
<br/>
index_datasource = рд╕реНрд╡ ред рдШрдЯрдХ ред рд╕реВрдЪрдХрд╛рдВрдХ <br/>
index_datasourceред рдореЗрдЯрд╛рдбреЗрдЯрд╛ [ 'рдЪрдпрди' ] = ( X1, x2 ) <br/>
<br/>
value_datasource = рд╕реНрд╡ ред рдШрдЯрдХ ред рдорд╛рди <br/>
value_datasourceред рдореЗрдЯрд╛рдбреЗрдЯрд╛ [ 'рдЪрдпрди' ] = ( y1, y2 ) <br/>
<br/>
рд╕реНрд╡ ред рдШрдЯрдХ ред request_redraw ( ) <br/>
<br/>
def map_to_data ( рд╕реНрд╡рдпрдВ , x, y ) : <br/>
"" "рджрд┐рдП рдЧрдП x рдФрд░ y рдХреЗ рдбреЗрдЯрд╛ рд╕реНрдкреЗрд╕ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рд▓реМрдЯрд╛рддрд╛ рд╣реИред <br/>
<br/>
рднреВрдЦрдВрдб рдХреА рдзреБрд░реА рдФрд░ рдЕрдХреНрд╖реАрдп рд╕реЗрдЯрд┐рдВрдЧ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддрд╛ рд╣реИред <br/>
"" " <br/>
<br/>
рдХрдерд╛рдирдХ = рд╕реНрд╡ ред рдШрдЯрдХ <br/>
рдЕрдЧрд░ рд╕рд╛рдЬрд┐рд╢ рд╣реИред рдЕрднрд┐рд╡рд┐рдиреНрдпрд╛рд╕ == "рдПрдЪ" : <br/>
рд╕реВрдЪрдХрд╛рдВрдХ = рдХрдерд╛рдирдХред x_mapperред map_data ( x ) <br/>
рдореВрд▓реНрдп = рдХрдерд╛рдирдХред y_mapperред map_data ( y ) <br/>
рдФрд░ : <br/>
рд╕реВрдЪрдХрд╛рдВрдХ = рдХрдерд╛рдирдХред y_mapperред map_data ( y ) <br/>
рдореВрд▓реНрдп = рдХрдерд╛рдирдХред x_mapperред map_data ( x ) <br/>
<br/>
рд╡рд╛рдкрд╕реА рд╕реВрдЪрдХрд╛рдВрдХ, рдорд╛рди <br/>
<br/>
<br/>
рдХреНрд▓рд╛рд╕ рдПрдХреНрд╕рд░реЗрдУрд╡рд░рд▓реЗ ( рдПрдмреНрд╕рдЯреНрд░реИрдХреНрдЯрд▓реЗ ) : <br/>
"" "рдУрд╡рд░рд▓реЗ рдЬреЛ рдХрдерд╛рдирдХ рдбреЗрдЯрд╛ рдмрд┐рдВрджреБрдУрдВ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рддрд┐рддрд░ рдмрд┐рддрд░ рдорд╛рд░реНрдХрд░реЛрдВ рдХреЛ рдЦреАрдВрдЪрддрд╛ рд╣реИред <br/>
<br/>
рдЗрд╕ рдУрд╡рд░рд▓реЗ рдХреЛ рдПрдХ рдЯреВрд▓ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ <br/> рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реИ
рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдЪрдпрди рд╕реАрдорд╛ рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛ рд╕реНрд░реЛрддред <br/>
"" " <br/>
<br/>
рдорд╛рд░реНрдХрд░ = рдбреЙрдЯрдорд╛рд░реНрдХрд░ ( ) <br/>
<br/>
def рдУрд╡рд░рд▓реЗ ( рд╕реНрд╡рдпрдВ , рдШрдЯрдХ, gc , view_bounds = рдХреЛрдИ рдирд╣реАрдВ , рдореЛрдб = 'рд╕рд╛рдорд╛рдиреНрдп' ) : <br/>
x_range = self_get_selection_index_screen_range ( ) <br/>
y_range = self_get_selection_value_screen_range ( ) <br/>
<br/>
рдЕрдЧрд░ рд▓реЗрди ( x_range ) == 0 : <br/>
рд╡рд╛рдкрд╕реА <br/>
<br/>
X1, x2 = x_range <br/>
y1, y2 = y_range <br/>
<br/>
gc рдХреЗ рд╕рд╛рде : <br/>
рдЬреА рд╕реА ред set_alpha ( 0.8 ) <br/>
рдЬреА рд╕реА ред set_fill_color ( 1.0 , 1.0 , 1.0 ) ) <br/>
рдЬреА рд╕реА ред рд░реЗрдХреНрдЯ ( X1, y1, x2-X1, y2-y1 ) <br/>
рдЬреА рд╕реА ред draw_path ( ) <br/>
<br/>
pts = self ._get_selected_point ( ) <br/>
рдЕрдЧрд░ рд▓реЗрди ( рдкреАрдЯреАрдПрд╕ ) == 0 : <br/>
рд╡рд╛рдкрд╕реА <br/>
screen_pts = рд╕реНрд╡ ред рдШрдЯрдХ ред map_screen ( pts ) <br/>
рдЕрдЧрд░ hasattr ( gc , 'draw_marker_at_point' ) : <br/>
рдЬреА рд╕реА ред draw_marker_at_point ( screen_pts, 3 , DOT_MARKER ) <br/>
рдФрд░ : <br/>
рдЬреА рд╕реА ред save_state ( ) <br/>
sx рдХреЗ рд▓рд┐рдП, рд╕реНрдХреНрд░реАрди_рд╕ рдореЗрдВ sy: <br/>
рдЬреА рд╕реА ред Translate_ctm ( sx, sy ) <br/>
рдЬреА рд╕реА ред start_path ( ) <br/>
рд╕реНрд╡ ред рдорд╛рд░реНрдХрд░ ред add_to_path ( gc , 3 ) <br/>
рдЬреА рд╕реА ред draw_path ( рд╕реНрд╡ ред рдорд╛рд░реНрдХрд░ ред draw_mode ) <br/>
рдЬреА рд╕реА ред Translate_ctm ( -sx, -sy ) <br/>
рдЬреА рд╕реА ред rest_state ( ) <br/>
<br/>
def _get_selected_point ( self ) : <br/>
"" "рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕реАрдорд╛ рдХреЗ рднреАрддрд░ рд╕рднреА рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ <br/>
рдореЗрдЯрд╛рдбрд╛рдЯрд╛ <br/>
"" " <br/>
index_datasource = рд╕реНрд╡ ред рдШрдЯрдХ ред рд╕реВрдЪрдХрд╛рдВрдХ <br/>
index_selection = index_datasourceред рдореЗрдЯрд╛рдбреЗрдЯрд╛ [ 'рдЪрдпрди' ' <br/>
index = index_datasource get_data ( ) <br/>
<br/>
value_datasource = рд╕реНрд╡ ред рдШрдЯрдХ ред рдорд╛рди <br/>
value_selection = value_datasourceред рдореЗрдЯрд╛рдбреЗрдЯрд╛ [ 'рдЪрдпрди' ' <br/>
value = value_datasourceред get_data ( ) <br/>
<br/>
x_indices = numpyред рдЬрд╣рд╛рдБ ( ( index > index_selection [ 0 ] ) & ( index < index_selection [ - 1 ] ) ) / br>
y_indices = numpyред рдЬрд╣рд╛рдБ ( ( рдорд╛рди > value_selection [ 0 ] ) & ( value < value_selection [ - 1 ] ) ) / br>
<br/>
рд╕реВрдЪрдХрд╛рдВрдХ = рд╕реВрдЪреА ( рд╕реЗрдЯ ( x_indices [ 0 ] ) рдФрд░ рд╕реЗрдЯ ( y_indices [ 0 ] ) ) <br/>
<br/>
sel_index = index [ рд╕реВрдЪрдХрд╛рдВрдХ ] <br/>
sel_value = рдореВрд▓реНрдп [ рд╕реВрдЪрдХрд╛рдВрдХ ] <br/>
<br/>
рд░рд┐рдЯрд░реНрди рдЬрд┐рдк ( sel_index, sel_value ) <br/>
<br/>
def _get_selection_index_screen_range ( рд╕реНрд╡рдпрдВ ) : <br/>
"" "рдЪрдпрдирд┐рдд рд╕реАрдорд╛ рдХреЛ рдореИрдк рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЯреВрд▓ рджреНрд╡рд╛рд░рд╛ рд╕реНрдХреНрд░реАрди <br/> рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдП рдЧрдП рдереЗ
рдЕрдВрддрд░рд┐рдХреНрд╖ред рд╕реНрдХреНрд░реАрди рд╕реНрдкреЗрд╕ рдкреЙрдЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдУрд╡рд░рд▓реЗ <br/> рдбреНрд░рд╛рдЗрдВрдЧ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
"" " <br/>
index_datasource = рд╕реНрд╡ ред рдШрдЯрдХ ред рд╕реВрдЪрдХрд╛рдВрдХ <br/>
index_mapper = рд╕реНрд╡ ред рдШрдЯрдХ ред index_mapper <br/>
index_selection = index_datasourceред рдореЗрдЯрд╛рдбреЗрдЯрд╛ [ 'рдЪрдпрди' ' <br/>
рд╡рд╛рдкрд╕реА рдЯреНрдпреВрдкрд▓ ( index_mapperред map_screen ( numpyред рд╕рд░рдгреА ( index_selection ) ) ) <br/>
<br/>
def _get_selection_value_screen_range ( рд╕реНрд╡рдпрдВ ) : <br/>
"" "рдЪрдпрдирд┐рдд рд╕реАрдорд╛ рдХреЛ рдореИрдк рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЯреВрд▓ рджреНрд╡рд╛рд░рд╛ рд╕реНрдХреНрд░реАрди <br/> рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдП рдЧрдП рдереЗ
рдЕрдВрддрд░рд┐рдХреНрд╖ред рд╕реНрдХреНрд░реАрди рд╕реНрдкреЗрд╕ рдкреЙрдЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдУрд╡рд░рд▓реЗ <br/> рдбреНрд░рд╛рдЗрдВрдЧ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
"" " <br/>
value_datasource = рд╕реНрд╡ ред рдШрдЯрдХ ред рдорд╛рди <br/>
value_mapper = рд╕реНрд╡ ред рдШрдЯрдХ ред value_mapper <br/>
value_selection = value_datasourceред рдореЗрдЯрд╛рдбреЗрдЯрд╛ [ 'рдЪрдпрди' ' <br/>
рд╡рд╛рдкрд╕реА рдЯреНрдпреВрдкрд▓ ( value_mapperред map_screen ( numpyред рд╕рд░рдгреА ( value_selection ) ) ) <br/>
<br/>
рд╡рд░реНрдЧ рдкреНрд▓реЙрдЯрдПрдХреНрд╕рдкреНрд▓рд┐рдореЗрдВрдЯ ( HasTraits ) : <br/>
<br/>
рдкреНрд▓реЙрдЯ = рдЗрдВрд╕реНрдЯреЗрдВрд╕ ( рдкреНрд▓реЙрдЯ ) <br/>
<br/>
traits_view = рджреГрд╢реНрдп ( рдЖрдЗрдЯрдо ( 'рдкреНрд▓реЙрдЯ' , рд╕рдВрдкрд╛рджрдХ = ComponentEditor ( ) ) , <br/>
рдЪреМрдбрд╝рд╛рдИ = 600 , рдКрдВрдЪрд╛рдИ = 600 ) <br/>
<br/>
def __init__ ( рд╕реНрд╡ , рд╕реВрдЪрдХрд╛рдВрдХ, рдореВрд▓реНрдп, * рдЖрд░реНрдЧ, ** kw ) : <br/>
рд╕реБрдкрд░ ( рдкреНрд▓реЙрдЯрдПрдХреНрд╕рдкреНрд▓рд┐рдореЗрдВрдЯрд┐рдВрдЧ, рд╕реЗрд▓реНрдл ) ред __in__ ( * рдЖрд░реНрдЧреНрд╕, ** kw ) <br/>
<br/>
plot_data = ArrayPlotData ( index = index ) <br/>
plot_dataред set_data ( 'рдорд╛рди' , рдорд╛рди ) <br/>
<br/>
рд╕реНрд╡ ред рдкреНрд▓реЙрдЯ = рдкреНрд▓реЙрдЯ ( рдкреНрд▓реЙрдЯ_рдбрд╛рдЯрд╛ ) <br/>
рдкрдВрдХреНрддрд┐ = рд╕реНрд╡ ред рдкреНрд▓реЙрдЯ ред рдкреНрд▓реЙрдЯ ( 'рдЗрдВрдбреЗрдХреНрд╕' , 'рд╡реИрд▓реНрдпреВ' ) ) [ 0 ] <br/>
<br/>
рд▓рд╛рдЗрдиред рдУрд╡рд░рд▓реЗ ред рдкрд░рд┐рд╢рд┐рд╖реНрдЯ ( XRayOverlay ( рд▓рд╛рдЗрди ) ) <br/>
рд▓рд╛рдЗрдиред рдЙрдкрдХрд░рдг ред рдкрд░рд┐рд╢рд┐рд╖реНрдЯ ( BoxSelectTool ( рд▓рд╛рдЗрди ) ) <br/>
<br/>
рд╕реВрдЪрдХрд╛рдВрдХ = рд╕реБрдиреНрдиред рдЕрд░реЗрдВрдЬ ( 0 , 25 , 0.25 ) <br/>
рдореВрд▓реНрдп = рд╕реБрдиреНрдиред sin ( index ) + numpyред рдЕрд░реЗрдВрдЬ ( 0 , 10 , 0.1 ) <br/>
<br/>
рдЙрджрд╛рд╣рд░рдг = PlotExample ( рдЗрдВрдбреЗрдХреНрд╕, рдорд╛рди ) <br/>
рдЙрджрд╛рд╣рд░рдгред config_traits ( )
рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╡рд┐рднрд┐рдиреНрди рдорд╛рд░реНрдХрд░:

numpy рд╕реЗ arange, рд╕реЙрд░реНрдЯ, рдХреЙрдореНрдкреНрд░реЗрд╕, arange рдореЗрдВ рдЖрдпрд╛рдд рдХрд░реЗрдВ <br/>
рд╕реБрдиреНрди рд╕реЗред рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЖрдпрд╛рдд рдпрд╛рджреГрдЪреНрдЫрд┐рдХ <br/>
рд╕рдХреНрд╖рдо рд╕реЗред example_support рдЖрдпрд╛рдд DemoFrame, Demo_main <br/>
рд╕рдХреНрд╖рдо рд╕реЗред рдПрдкреАрдЖрдИ рдЖрдпрд╛рдд рдШрдЯрдХ, рдШрдЯрдХ рд╕рдВрдзрд╛рд░рд┐рддреНрд░, рд╡рд┐рдВрдбреЛ <br/>
рд▓рдХреНрд╖рдгреЛрдВ рд╕реЗред рдПрдкреАрдЖрдИ рдЖрдпрд╛рдд рд╣реИрдЯреНрд░реЗрдЯреНрд╕, рдЗрдВрд╕реНрдЯреЗрдВрд╕ <br/>
рдЯреНрд░рд┐рдЯреАрд╕реБрдИ рд╕реЗред рдПрдкреАрдЖрдИ рдЖрдпрд╛рдд рдЖрдЗрдЯрдо, рд╕рдореВрд╣, рджреЗрдЦреЗрдВ <br/>
рдЪрд╛рдХреЛ рд╕реЗред рдПрдкреАрдЖрдИ рдЖрдпрд╛рдд AbstractDataSource, ArrayPlotData, рдкреНрд▓реЙрдЯ, \ <br/>
HPlotContainer, LassoOverlay <br/>
рдЪрд╛рдХреЛ рд╕реЗред рдЙрдкрдХрд░рдг ред рдПрдкреАрдЖрдИ рдЖрдпрд╛рдд LassoSelection, ScatterInspector <br/>
<br/>
# ==================================================== ================================ <br/>
# # рдЪрд╛рдХреЛ рдХреА рд╕рд╛рдЬрд┐рд╢ рд░рдЪреЗрдВред <br/>
# ==================================================== ================================ <br/>
def _create_plot_component ( ) : <br/>
<br/>
# рдХреБрдЫ рдбреЗрдЯрд╛ рдмрдирд╛рдПрдВ <br/>
npts = 2000 <br/>
x = рд╕реЙрд░реНрдЯ ( рдпрд╛рджреГрдЪреНрдЫрд┐рдХ ( npts ) ) <br/>
y = рдпрд╛рджреГрдЪреНрдЫрд┐рдХ ( npts ) <br/>
<br/>
# рдПрдХ рднреВрдЦрдВрдб рдбреЗрдЯрд╛ рдЕрд╡рд░реЛрдз рдмрдирд╛рдПрдБ рдФрд░ рдЗрд╕реЗ рдпрд╣ рдбреЗрдЯрд╛ рджреЗрдВ <br/>
pd = ArrayPlotData ( ) <br/>
рдкреАрдбреАред set_data ( "рдЗрдВрдбреЗрдХреНрд╕" , x ) <br/>
рдкреАрдбреАред set_data ( "рдорд╛рди" , y ) <br/>
<br/>
# рдкреНрд▓реЙрдЯ рдмрдирд╛рдПрдВ <br/>
рдкреНрд▓реЙрдЯ = рдкреНрд▓реЙрдЯ ( рдкреАрдбреА ) <br/>
рд╕рд╛рдЬрд┐рд╢ред рдкреНрд▓реЙрдЯ ( "рдЗрдВрдбреЗрдХреНрд╕" , "рдореВрд▓реНрдп" ) , <br/>
рдЯрд╛рдЗрдк = "рд╕реНрдХреИрдЯрд░" , <br/>
рдирд╛рдо = "my_plot" , <br/>
рдорд╛рд░реНрдХрд░ = "рд╕рд░реНрдХрд▓" , <br/>
index_sort = "рдЖрд░реЛрд╣реА" , <br/>
рд░рдВрдЧ = "рд▓рд╛рд▓" , <br/>
рдорд╛рд░реНрдХрд░_рд╕рд╛рдЗрдЬрд╝ = 4 , <br/>
bgcolor = "рд╡реНрд╣рд╛рдЗрдЯ" ) <br/>
<br/>
# рдХрдерд╛рдирдХ рдХреЗ рдХреБрдЫ рдЧреБрдгреЛрдВ рдХреЛ рдореЛрдбрд╝ рджреЗрдВ <br/>
рд╕рд╛рдЬрд┐рд╢ред рд╢реАрд░реНрд╖рдХ = "рдЪрдпрди рдХреЗ рд╕рд╛рде рд╕реНрдХреИрдЯрд░ рдкреНрд▓реЙрдЯ" <br/>
рд╕рд╛рдЬрд┐рд╢ред рд▓рд╛рдЗрди_рдЕрд╡рдХреНрд░рдордг = 1 <br/>
рд╕рд╛рдЬрд┐рд╢ред рдЧрджреНрджреА = 50 <br/>
<br/>
# рдЕрднреА, рдХреБрдЫ рдЙрдкрдХрд░рдг рдереЛрдбрд╝реЗ рдЖрдХреНрд░рд╛рдордХ рд╣реИрдВ, рдФрд░ рд╣рдореЗрдВ <br/> рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
# рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реНрдХреИрдЯрд░рдкреНрд▓реЙрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдЙрдиреНрд╣реЗрдВ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП <br/>
my_plot = рдХрдерд╛рдирдХред рднреВрдЦрдВрдб [ "my_plot" ] [ 0 ] <br/>
<br/>
# рднреВрдЦрдВрдб рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЙрдкрдХрд░рдг рд╕рдВрд▓рдЧреНрди рдХрд░реЗрдВ <br/>
lasso_selection = LassoSelection ( рдШрдЯрдХ = my_plot, <br/>
рдЪрдпрди_рджрддреНрддрд╛рд╕реНрд░реЛрдд = my_plotред рд╕реВрдЪрдХрд╛рдВрдХ ) <br/>
my_plotред active_tool = lasso_selection <br/>
my_plotред рдЙрдкрдХрд░рдг ред рдкрд░рд┐рд╢рд┐рд╖реНрдЯ ( ScatterInspector ( my_plot ) ) <br/>
lasso_overlay = LassoOverlay ( lasso_selection = lasso_selection, <br/>
рдШрдЯрдХ = my_plot ) <br/>
my_plotред рдУрд╡рд░рд▓реЗ ред append ( lasso_overlay ) <br/>
<br/>
# рдЕрдЧрд░ рдЖрдк рд╡реГрджреНрдзрд┐рд╢реАрд▓ рдЕрдкрдбреЗрдЯ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдЗрд╕реЗ рд░рджреНрдж рдХрд░реЗрдВ: <br/>
# lasso_selection.incremental_select = True <br/>
<br/>
рд╡рд╛рдкрд╕реА рдкреНрд▓реЙрдЯ <br/>
<br/>
<br/>
# ==================================================== ================================ <br/>
# рдкреНрд▓реЙрдЯ рджреГрд╢реНрдп рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБред <br/>
рдЖрдХрд╛рд░ = ( 650 , 650 ) <br/>
рд╢реАрд░реНрд╖рдХ = "рдЪрдпрди рдХреЗ рд╕рд╛рде рд╕реНрдХреИрдЯрд░ рдкреНрд▓реЙрдЯ" <br/>
bg_color = " lightgray " <br/>
<br/>
# ==================================================== ================================ <br/>
# # рдбреЗрдореЛ рдХреНрд▓рд╛рд╕ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдбреЗрдореЛрдХреНрд░реЛрдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред <br/>
# ==================================================== ================================ <br/>
рд╡рд░реНрдЧ рдбреЗрдореЛ ( HasTraits ) : <br/>
рдкреНрд▓реЙрдЯ = рдЗрдВрд╕реНрдЯреЗрдВрд╕ ( рдШрдЯрдХ ) <br/>
<br/>
traits_view = рджреГрд╢реНрдп ( <br/>)
рд╕рдореВрд╣ ( <br/>
рдЖрдЗрдЯрдо ( 'рдкреНрд▓реЙрдЯ' , рд╕рдВрдкрд╛рджрдХ = рдХрдВрдкреЛрдиреЗрдВрдЯ рдПрдбрд┐рдЯрд░ ( рдЖрдХрд╛рд░ = рдЖрдХрд╛рд░ ) , <br/>
show_label = рдЧрд▓рдд ) , <br/>
рдУрд░рд┐рдПрдВрдЯреЗрд╢рди = "рд╡рд░реНрдЯрд┐рдХрд▓" ) , <br/>
resizable = true , рд╢реАрд░реНрд╖рдХ = рд╢реАрд░реНрд╖рдХ <br/>
) <br/>
<br/>
def _selection_changed ( self ) : <br/>
рдореБрдЦреМрдЯрд╛ = рд╕реНрд╡ ред index_datasourceред рдореЗрдЯрд╛рдбреЗрдЯрд╛ [ 'рдЪрдпрди' ] <br/>
"рдирдпрд╛ рдЪрдпрди:" <br/> рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдВ
рдкреНрд░рд┐рдВрдЯ рдХрдВрдкреНрд░реЗрд╕ ( рдорд╛рд╕реНрдХ, рдЕрд░реЗрдВрдЬ ( рд▓реЗрди ( рдорд╛рд╕реНрдХ ) ) ) <br/>
<br/> рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдВ
<br/>
def _plot_default ( self ) : <br/>
рдкреНрд▓реЙрдЯ = _create_plot_component ( ) <br/>
<br/>
# LassoSelection рдЯреВрд▓ рд╕реЗ рдЬреБрдбрд╝реЗ рдкреНрд▓реЙрдЯ рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред <br/>
my_plot = рдХрдерд╛рдирдХред рднреВрдЦрдВрдб [ "my_plot" ] [ 0 ] <br/>
lasso_selection = my_plotред рд╕рдХреНрд░рд┐рдп_рдЯреВрд▓ <br/>
<br/>
# рдЪрдпрди рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИрдВрдбрд▓рд░ рд╕реЗрдЯ рдХрд░реЗрдВ <br/>
рд╕реНрд╡ ред index_datasource = my_plot рд╕реВрдЪрдХрд╛рдВрдХ <br/>
lasso_selectionред on_trait_change ( self ._selection_changed, <br/>
'Selection_changed' ) <br/>
<br/>
рд╡рд╛рдкрд╕реА рдкреНрд▓реЙрдЯ <br/>
<br/>
рдбреЗрдореЛ = рдбреЗрдореЛ ( ) <br/>
<br/>
# ==================================================== ================================ <br/>
# рдкреНрд▓реЙрдЯ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреИрдВрдб-рдЕрд▓реЛрди рдлреНрд░реЗрдоред <br/>
# ==================================================== ================================ <br/>
рд╡рд░реНрдЧ рдкреНрд▓реЙрдЯрдлрд╝реНрд░реЗрдо ( рдбреЗрдореЛрдлреНрд░реЗрдо ) : <br/>
<br/>
index_datasource = рдЗрдВрд╕реНрдЯреЗрдВрд╕ ( AbstractDataSource ) <br/>
<br/>
def _create_window ( рд╕реНрд╡ ) : <br/>
<br/>
рдШрдЯрдХ = _create_plot_component ( ) <br/>
<br/>
# LassoSelection рдЯреВрд▓ рд╕реЗ рдЬреБрдбрд╝реЗ рдкреНрд▓реЙрдЯ рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред <br/>
my_plot = рдШрдЯрдХред рднреВрдЦрдВрдб [ "my_plot" ] [ 0 ] <br/>
lasso_selection = my_plotред рд╕рдХреНрд░рд┐рдп_рдЯреВрд▓ <br/>
<br/>
# рдЪрдпрди рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИрдВрдбрд▓рд░ рд╕реЗрдЯ рдХрд░реЗрдВ <br/>
рд╕реНрд╡ ред index_datasource = my_plot рд╕реВрдЪрдХрд╛рдВрдХ <br/>
lasso_selectionред on_trait_change ( self ._selection_changed, <br/>
'Selection_changed' ) <br/>
<br/>
# рд╣рдорд╛рд░реЗ рднреВрдЦрдВрдбреЛрдВ рд╡рд╛рд▓реА рдПрдХ рдЦрд┐рдбрд╝рдХреА рд▓реМрдЯреЗрдВ <br/>
рд╡рд╛рдкрд╕реА рдЦрд┐рдбрд╝рдХреА ( рд╕реНрд╡рдпрдВ , - 1 , рдШрдЯрдХ = рдШрдЯрдХ, bg_color = bg_color ) <br/>
<br/>
def _selection_changed ( self ) : <br/>
рдореБрдЦреМрдЯрд╛ = рд╕реНрд╡ ред index_datasourceред рдореЗрдЯрд╛рдбреЗрдЯрд╛ [ 'рдЪрдпрди' ] <br/>
"рдирдпрд╛ рдЪрдпрди:" <br/> рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдВ
рдкреНрд░рд┐рдВрдЯ рдХрдВрдкреНрд░реЗрд╕ ( рдорд╛рд╕реНрдХ, рдЕрд░реЗрдВрдЬ ( рд▓реЗрди ( рдорд╛рд╕реНрдХ ) ) ) <br/>
<br/> рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдВ
<br/>
<br/>
рдЕрдЧрд░ __name__ == "__main__" : <br/>
Demo_main ( рдкреНрд▓реЙрдЯрдлрд╝реНрд░реЗрдо, рдЖрдХрд╛рд░ = рдЖрдХрд╛рд░, рд╢реАрд░реНрд╖рдХ = рд╢реАрд░реНрд╖рдХ )
рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЪрд╛рдХреЛ рдПрдиреАрдореЗрд╢рди рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рдИрдЯреАрдПрд╕ / рдЪрд╛рдХреЛ / рдЙрджрд╛рд╣рд░рдг / update_plot рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рджреЗрдЦреЗрдВ
HPGL-GUI рдкрд░ рдЪрд╛рдХреЛ
HPGL-GUI рдХреЛ рд╣рд┐рд╕реНрдЯреЛрдЧреНрд░рд╛рдо рдмрдирд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рдереАред рдорд╛рдЯрдкреНрд▓реЛрдЯрд▓рд┐рдм рдФрд░ рдЪрд╛рдХреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдЙрдкрдпреБрдХреНрдд рдереЗред рдЪреБрдирд╛рд╡ рдЪрд╛рдХреЛ рдкрд░ рдЧрд┐рд░ рдЧрдпрд╛, рдХреНрдпреЛрдВрдХрд┐ Matplotlib рдиреЗ PySide рдореЗрдВ рдПрдХреАрдХрд░рдг рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд┐рдпрд╛ред
рдЖрдБрдХрдбрд╝реЛрдВ рдХреА рдЦрд┐рдбрд╝рдХреА рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИ:

рдпрд╣рд╛рдБ рдХреЛрдб рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
raw.github.com/Snegovikufa/HPGL-GUI/master/gui_widgets/statistics_window.pyPS рдЕрдЧрд░ рдЖрдкрдХреЛ PyQt4 рдпрд╛ PySide рдореЗрдВ рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреА рд╣реИ, рддреЛ рдореИрдВ рдЗрд╕реЗ рдЬреЛрдбрд╝реВрдВрдЧрд╛ред
рдпреБрдкреАрдбреАред рд╡рд┐рддреНрддреАрдп рдЪрд╛рд░реНрдЯ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛: рд╡рд┐рд╕реНрддреГрдд рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рдЬреЛрдбрд╝реА рдЧрдИрдВ рдФрд░ PySide рд╡рд┐рдЬреЗрдЯ рдореЗрдВ рдПрдореНрдмреЗрдбрд┐рдВрдЧ рдХреА рдЧрдИред