рдиреЛрдб рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП WxPython рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдгред рднрд╛рдЧ 1: рдбреНрд░рд╛ рдХрд░рдирд╛ рд╕реАрдЦрдирд╛

рд▓реЗрдЦреЛрдВ рдХреА рдПрдХ рдЫреЛрдЯреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рд╣рдо рдПрдХ рдпреВрдЬрд░ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рдПрдХ рдмрд╣реБрдд рд╣реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдп рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП WxPython рдХреЗ рдЙрдкрдпреЛрдЧ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХреЛ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдХреИрд╕реЗ рдмрдирд╛рдПрдВрдЧреЗред рдпрд╣ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рдЪреБрдХреЗ рд╣реИрдВ рдФрд░ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХреБрдЫ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдФрд░ рд╕рдордЧреНрд░ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╕рд░рд▓ рдЪреАрдЬреЛрдВ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ)ред

рдФрд░ рдпрд╣ рд╕рдм рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╢реБрд░реВ рд╣реБрдЖ: рдореБрдЭреЗ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдпреВрдЖрдИ рдмрдирд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рдереА, рдЬрд╣рд╛рдВ рдореБрдЭреЗ рд╕рдВрджреЗрд╢ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдЕрдиреБрдХреНрд░рдо рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╕рд┐рдореБрд▓рд┐рдВрдХ рдЬреИрд╕рд╛ рдХреБрдЫред рддрджрдиреБрд╕рд╛рд░, рдпрд╣ рддреИрдпрд╛рд░-рдХрд┐рдП рдЧрдП рдХрд╛рдореЛрдВ / рд░реВрдкрд░реЗрдЦрд╛рдУрдВ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рдерд╛ред рдкрд╣рд▓реЗ рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдпрд╣ рдХрд╛рд░реНрдп рд▓реЛрдХрдкреНрд░рд┐рдп рдерд╛ рдФрд░ рдХрд┐рд╕реА рдиреЗ рдЗрд╕ рдмрд╛рдЗрдХ рдХреЛ рдкрд╣рд▓реЗ рд╣реА рдЦреЛрдЬ рд▓рд┐рдпрд╛ рдерд╛, рдЦреЛрдЬрд╛ рдерд╛, рдЦреЛрдЬрд╛ рдерд╛ рдФрд░ рдпрд╣ рдирд╣реАрдВ рдорд┐рд▓рд╛ред рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ, рдореБрдЭреЗ рдмрд╣реБрдд рд╕рд╛рд░реА рдПрдВрдЯреАрдХ рд╕рд╛рдЗрдХрд┐рд▓реЗрдВ рдорд┐рд▓реАрдВ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рдФрд░ рдХреА рдкреБрд░рд╛рдиреА рд╕рд╛рдЗрдХрд┐рд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдпрджрд┐ рдЖрдк рдЕрдкрдиреА рдЦреБрдж рдХреА рдирдИ рд╕рд╛рдЗрдХрд┐рд▓ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдПрдХ рдирдИ рд╕рд╛рдЗрдХрд┐рд▓ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж рд╕реЗ, рдЗрд╕реЗ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛, рдЖрдк рдХрднреА рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ рдпрд╣ рдХрд╣рд╛рдВ рдХрд╛рдо рдЖрдПрдЧрд╛ред

рдЗрд╕рд▓рд┐рдП рдореИрдВ рдХреБрдЫ рд▓реЗрдЦреЛрдВ рдореЗрдВ рд╕реНрдХреНрд░реИрдЪ рд╕реЗ рд╡рд┐рдХрд╛рд╕ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ред рдЦреИрд░, рдЗрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдФрд░ рдлрд╛рд░реНрдорд╡рд░реНрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдерд╛, рдЗрд╕рдХреЗ рд▓рд┐рдП рдкрд╣рд▓рд╛ рдХрд╛рдо рд╕рд┐рдореБрд▓рд┐рдВрдХ рдХреА рддрд░рд╣ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдлреНрд▓реЛрдЪрд╛рд░реНрдЯ рдХреЛ рд▓рд╛ рд╡рд┐рд╕рд┐рдпреЛ рдбреНрд░рд╛рдЗрдВрдЧ рдХреЗ рд▓рд┐рдП рд╕реЙрдлреНрдЯрд╡реЗрдпрд░, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд╛рдареА рдФрд░ рдЕрдиреНрдп рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде :)

рднрд╛рдЧ 1: рдбреНрд░рд╛ рдХрд░рдирд╛ рд╕реАрдЦрдирд╛
рднрд╛рдЧ 2: рдорд╛рдЙрд╕ рдИрд╡реЗрдВрдЯреНрд╕ рдХреЛ рд╣реИрдВрдбрд▓ рдХрд░рдирд╛
рднрд╛рдЧ 3: рд╕реБрд╡рд┐рдзрд╛рдУрдВ + рдХреАрдмреЛрд░реНрдб рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рд░реА рд╣реИ
рднрд╛рдЧ 4: рдбреНрд░реИрдЧ рдПрдВрдб рдбреНрд░реЙрдк рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛
рднрд╛рдЧ 5: рдиреЛрдб рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ

рдХреМрди рдкрд░рд╡рд╛рд╣ рдХрд░рддрд╛ рд╣реИ, рдмрд┐рд▓реНрд▓реА рдХреЗ рдиреАрдЪреЗ рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ ...


рдереЛрдбрд╝реА рдЯрд┐рдкреНрдкрдгреА: рдореИрдВ рдХреЛрдб рдореЗрдВ рдЕрдВрдЧреНрд░реЗрдЬреА рдирд╛рдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ рдФрд░ рдЕрдХреНрд╕рд░ рд▓рд┐рдкреНрдпрдВрддрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛, рдЕрд░реНрдерд╛рдд "рдХреИрдирд╡рд╛рд╕" рдпрд╛ "рдХреИрдирд╡рд╛рд╕" рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдореИрдВ "рдХреИрдирд╡рд╛рд╕" рд▓рд┐рдЦреВрдВрдЧрд╛ред рд╣рд╛рдВ, рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЦрд░рд╛рдм рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рд╕рд╣реА рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд░реВрд╕реА рдФрд░ рдЕрдВрдЧреНрд░реЗрдЬреА рдХреЛ рдорд┐рд▓рд╛рдиреЗ рдХрд╛ рдХреЛрдИ рдЖрджрд░реНрд╢ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ, рд╕рднреА рддрд░реАрдХреЛрдВ рдореЗрдВ рдЙрдирдХреА рдХрдорд┐рдпрд╛рдВ рд╣реИрдВ (рдореЗрд░реА рдирд┐рдЬреА рд░рд╛рдп)ред

1. рдкрд╣рд▓рд╛ рдкрд░реАрдХреНрд╖рдг


рдЖрдЗрдП рд╕рд░рд▓ рд╕рд╛рдорд╛рдиреНрдп рдЪреАрдЬреЛрдВ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВред рдЪреВрдВрдХрд┐ рдпрд╣ рдПрдХ рд░реВрдкрд░реЗрдЦрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЖрд╡реЗрджрди рдХрд░реЗрдЧрд╛ рдпрд╛ рдЙрди рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдмрдирд╛ рджреЗрдЧрд╛ рдЬреЛ рдЙрдиреНрд╣реЗрдВ рдмрдирд╛рдПрдВрдЧреЗред рдпрд╛рдиреА рд╕рдмрд╕реЗ рд╕рд░рд▓ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдЖрд╡реЗрджрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рдордп рддрдХ рд╕реЛрдЪреЗ рдмрд┐рдирд╛, рдореИрдВрдиреЗ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдореИрдВ рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ рдЬреБрдбрд╝реА рдЖрдпрддреЛрдВ рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░реВрдБрдЧрд╛ рдФрд░ рдЗрд╕ рдХреЛрдб рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрдЧрд╛ (рдпрд╣ рдлрд╝рд╛рдЗрд▓ "ConnectedBoxes.py" рдореЗрдВ рд░рд╣реЗрдЧрд╛):
import wx from MoveMe.Canvas.Canvas import Canvas class CanvasWindow(wx.Frame): def __init__(self, *args, **kw): wx.Frame.__init__(self, *args, **kw) s = wx.BoxSizer(wx.VERTICAL) s.Add(Canvas(self), 1, wx.EXPAND) self.SetSizer(s) if __name__ == '__main__': app = wx.PySimpleApp() CanvasWindow(None).Show() app.MainLoop() 

рдХреБрдЫ рдмрд╛рддреЛрдВ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рдХрд╛рдлреА рддреБрдЪреНрдЫ рдФрд░ рд╕реНрдкрд╖реНрдЯ рд╣реИ: MoveMe рд╣рдорд╛рд░реЗ рдврд╛рдВрдЪреЗ рдХрд╛ рдирд╛рдо рд╣реИ, рдФрд░ рдХреИрдирд╡рд╕ рд╣рдорд╛рд░реЗ рдврд╛рдВрдЪреЗ рдХрд╛ рдореБрдЦреНрдп рд╡рд░реНрдЧ рд╣реИ, рдЬреЛ рдкреВрд░реА рдмрд╛рдд рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред

2. рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реАрдЦрдирд╛


рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреИрдирд╡рд╛рд╕ рдХреЗ рд╕рд╛рде, рд╣рдорд╛рд░реА рд░реВрдкрд░реЗрдЦрд╛ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИред рд╡рд╣ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рднрдВрдбрд╛рд░рдг рдХреЗ рд▓рд┐рдП рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░ рд╣реИ (рд╣рдо рдЙрдиреНрд╣реЗрдВ рдиреЛрдбреНрд╕ рдХрд╣реЗрдВрдЧреЗ), рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХрд╛ рдЙрдирдХрд╛ рдкреНрд░рддрд┐рдкрд╛рджрди рдФрд░ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдгред рддрджрдиреБрд╕рд╛рд░, рд╣рдо рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдбреНрд░рд╛рдЗрдВрдЧ рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред
 import wx class Canvas(wx.PyScrolledWindow): """ Canvas stores and renders all nodes and node connections. It also handles all user interaction. """ def __init__(self, *args, **kw): super(Canvas, self).__init__(*args, **kw) self.scrollStep = kw.get("scrollStep", 10) self.canvasDimensions = kw.get("canvasDimensions", [800, 800]) self.SetScrollbars(self.scrollStep, self.scrollStep, self.canvasDimensions[0]/self.scrollStep, self.canvasDimensions[1]/self.scrollStep) self._dcBuffer = wx.EmptyBitmap(*self.canvasDimensions) self.Render() self.Bind(wx.EVT_PAINT, lambda evt: wx.BufferedPaintDC(self, self._dcBuffer, wx.BUFFER_VIRTUAL_AREA) ) def Render(self): """Render all nodes and their connection in depth order.""" cdc = wx.ClientDC(self) self.PrepareDC(cdc) dc = wx.BufferedDC(cdc, self._dcBuffer) dc.Clear() gc = wx.GraphicsContext.Create(dc) gc.SetPen(wx.Pen('#000000', 2, wx.SOLID)) gc.DrawRoundedRectangle(12, 34, 56, 78, 10) gc.DrawRoundedRectangle(112, 134, 156, 178, 10) 

рдпрд╣рд╛рдБ рд╕рдм рдХреБрдЫ рдереЛрдбрд╝рд╛ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ:
рдпрджрд┐ рдЖрдк рдЕрднреА рдХреЛрдб рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рд╡рд┐рдВрдбреЛ рдореЗрдВ рдЧреЛрд▓ рдЖрдпрддреЛрдВ рдХреЗ рдХреБрдЫ рдЖрдИрдлрд╝реЛрди рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рд╕реНрдХреНрд░реЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


3. рджреГрд╢реНрдп рдХреА рд╡реНрдпрд╡рд╕реНрдерд╛ рдХрд░рдирд╛


рд╣рдордиреЗ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдбреНрд░рд╛рдЗрдВрдЧ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛, рдпрд╣ рд╕рдордп рд╣реИ рдХрд┐ рдХрд┐рд╕реА рддрд░рд╣ рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕реБрдзрд╛рд░рд╛ рдЬрд╛рдП рдФрд░ рдордВрдЪ рдкрд░ рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЛ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЬрд╛рдПред рд╕рднреА рджреГрд╢реНрдпрдорд╛рди рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдПрдХ рд╕реВрдЪреА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬреЛ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдХреНрд░рдо рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдЧрд╛ред рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо "_canvasObjects" рдлрд╝реАрд▓реНрдб рдХреЛ рдХреИрдирд╡рд╛рд╕ рдХреНрд▓рд╛рд╕ рдореЗрдВ рдЬреЛрдбрд╝ рджреЗрдВрдЧреЗ рдФрд░ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдереЛрдбрд╝рд╛ рдмрджрд▓ рджреЗрдВрдЧреЗ, рдЕрд░реНрдерд╛рддреНред рд╕реАрдзреЗ рдбреНрд░рд╛рдЗрдВрдЧ рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рджреГрд╢реНрдп рдкрд░ рд╕рднреА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд░реЗрдВрдбрд░ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВрдЧреЗред рдЕрдм рдХреЛрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
 import wx from MoveMe.Canvas.Objects.SimpleBoxNode import SimpleBoxNode class Canvas(wx.PyScrolledWindow): """ Canvas stores and renders all nodes and node connections. It also handles all user interaction. """ def __init__(self, *args, **kw): super(Canvas, self).__init__(*args, **kw) self.scrollStep = kw.get("scrollStep", 10) self.canvasDimensions = kw.get("canvasDimensions", [800, 800]) self.SetScrollbars(self.scrollStep, self.scrollStep, self.canvasDimensions[0]/self.scrollStep, self.canvasDimensions[1]/self.scrollStep) self._canvasObjects = [SimpleBoxNode([20,20]), SimpleBoxNode([140,40]), SimpleBoxNode([60,120])] self._dcBuffer = wx.EmptyBitmap(*self.canvasDimensions) self.Render() self.Bind(wx.EVT_PAINT, lambda evt: wx.BufferedPaintDC(self, self._dcBuffer, wx.BUFFER_VIRTUAL_AREA) ) def Render(self): """Render all nodes and their connection in depth order.""" cdc = wx.ClientDC(self) self.PrepareDC(cdc) dc = wx.BufferedDC(cdc, self._dcBuffer) dc.Clear() gc = wx.GraphicsContext.Create(dc) for obj in self._canvasObjects: gc.PushState() obj.Render(gc) gc.PopState() 

рд╡реИрд╕реЗ, рджреГрд╢реНрдп рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреА рд╕реВрдЪреА рдореЗрдВ рддреБрд░рдВрдд SimpleBoxNode рдХреНрд▓рд╛рд╕ рдХреЗ рдХрдИ рдСрдмреНрдЬреЗрдХреНрдЯ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдЬреЛ рдЕрднреА рдХреЗ рд▓рд┐рдП рдмрд╕ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЗ рд╕рд╛рде рдЖрдпрддреЛрдВ рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░реЗрдЧрд╛ред
 import wx class SimpleBoxNode(object): """ SimpleBoxNode class represents a simplest possible canvas object that is basically a rectangular box. """ def __init__(self, pos): self.position = pos self.boundingBoxDimensions = [90, 60] def Render(self, gc): gc.SetPen(wx.Pen('#000000', 2, wx.SOLID)) gc.DrawRoundedRectangle(self.position[0], self.position[1], self.boundingBoxDimensions[0], self.boundingBoxDimensions[1], 10) gc.SetFont(wx.SystemSettings.GetFont(wx.SYS_DEFAULT_GUI_FONT)) gc.DrawText("(%d, %d)"%(self.position[0], self.position[1]), self.position[0]+10, self.position[1]+10) 

рдпрд╣рд╛рдБ рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рдорд╛рдореВрд▓реА рд▓рдЧрддрд╛ рд╣реИред рдЬрдм рддрдХ рдХрд┐ рдлрд╝реЙрдиреНрдЯ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рди рд╣реЛ, рдХреНрдпреЛрдВрдХрд┐ "рдЧреНрд░рд╛рдлрд╝рд┐рдХреНрд╕ рдХреЙрдиреНрдЯреЗрдХреНрд╕реНрдЯ" рдХреА рдХреЛрдИ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдирд╣реАрдВ рд╣реИ (рд╣рдо рдЗрд╕ рддрдереНрдп рдФрд░ рдЗрд╕рдХреЗ рд╕реБрдзрд╛рд░ рдкрд░ рд▓реМрдЯ рдЖрдПрдВрдЧреЗ)ред рдлрд┐рд▓рд╣рд╛рд▓, рд╣рдорд╛рд░рд╛ рдХреЛрдб рдпрд╣ рдЪрд┐рддреНрд░ рдмрдирд╛ рд░рд╣рд╛ рд╣реИ:

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

рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП ...

PS1: рдХреЛрдб GitHub рдкрд░ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
PS2: рдкреАрдПрдо рдореЗрдВ рдЯрд╛рдЗрдкреЛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓рд┐рдЦреЗрдВред

Source: https://habr.com/ru/post/In201336/


All Articles