Главная » 2015 » Сентябрь » 14 » Вопрос.
10:14
Вопрос.
#В этом графическом Контексте Rectangl передвигается без проблем. Можно ли так же передвигать Arc ??? (Я пока не знаю как настроить ЖЖ под правильное расставление пробелов.)import wximport randomimport timeW = 10000H = 10000SW = 1000for i in range(1):            id = wx.NewId()            dc.SetId(id)            x = 145            y = 290            x2 = 175            y2 = 260            xc = 145            yc = 210            pen = self.pen            dc.SetPen(pen)            dc.SetBrush(wx.Brush((200,2,200)))            dc.DrawArc( x, y, x2, y2, xc, yc)            r = wx.Rect( x , y2, x2, y)            r.Inflate(pen.GetWidth(),pen.GetWidth())            dc.SetIdBounds(id,r)            self.objids.append(id)SH = 1000klv = 0colours = [    "BLACK",    "BLUE",    "BLUE VIOLET",    "BROWN",    "CYAN",    "DARK GREY",    "DARK GREEN",    "GOLD",    "GREY",    "GREEN",    "MAGENTA",    "NAVY",    "PINK",    "RED",    "SKY BLUE",    "VIOLET",    "YELLOW",    ]class MyFrame( wx.Frame ):    def __init__( self, parent ):        wx.Frame.__init__( self, parent, size = ( 900 , 450 ) )        self.canvas = MyPanel( self )class MyPanel( wx.ScrolledWindow ):    def __init__( self, parent ):        wx.ScrolledWindow.__init__( self, parent )        self.SetVirtualSize((H , W))        self.SetScrollRate(20,20)        self.pdc = wx.PseudoDC()        self.parent = parent        self.color = "blue"        self.thickness = 1        self.pen = wx.Pen(self.color, self.thickness, wx.STIPPLE)        self.DoDrawing(self.pdc)#        self.Refresh()        self.dragid = -1        self.Bind( wx.EVT_PAINT, self.OnPaint )        self.Bind(wx.EVT_MOUSE_EVENTS, self.OnMouse)    def OnPaint(self, event):        dc = wx.BufferedPaintDC(self)        self.PrepareDC(dc)        # we need to clear the dc BEFORE calling PrepareDC        bg = wx.Brush(self.GetBackgroundColour())        dc.SetBackground(bg)        dc.Clear()        # create a clipping rect from our position and size        # and the Update Region        xv, yv = self.GetViewStart()        dx, dy = self.GetScrollPixelsPerUnit()        x, y   = (xv * dx, yv * dy)        rgn = self.GetUpdateRegion()        rgn.Offset(x,y)        r = rgn.GetBox()#        print r        # draw to the dc using the calculated clipping rect        self.pdc.DrawToDCClipped(dc,r)    def DoDrawing(self, dc):        random.seed()        self.objids = []        self.boundsdict = {}        dc.BeginDrawing()        for i in range(1):            id = wx.NewId()            dc.SetId(id)            x = 145            y = 290            x2 = 175            y2 = 260            xc = 145            yc = 210            pen = self.pen            dc.SetPen(pen)            dc.SetBrush(wx.Brush((200,2,200)))            dc.DrawArc( x, y, x2, y2, xc, yc)            r = wx.Rect( x , y2, x2, y)            r.Inflate(pen.GetWidth(),pen.GetWidth())            dc.SetIdBounds(id,r)            self.objids.append(id)        for i in range(1):            id = wx.NewId()            dc.SetId(id)            x = 445            y = 190            x2 = 175            y2 = 260            pen = self.pen            dc.SetPen(pen)            dc.SetBrush(wx.Brush((200,2,200)))            dc.DrawRectangle( x, y, x2, y2)            r = wx.Rect( x , y, x2, y2)            r.Inflate(pen.GetWidth(),pen.GetWidth())            dc.SetIdBounds(id,r)            self.objids.append(id)        dc.EndDrawing()    def ConvertEventCoords(self, event):        xView, yView = self.GetViewStart()        xDelta, yDelta = self.GetScrollPixelsPerUnit()        return (event.GetX() + (xView * xDelta),            event.GetY() + (yView * yDelta))    def OffsetRect(self, r):        xView, yView = self.GetViewStart()        xDelta, yDelta = self.GetScrollPixelsPerUnit()        r.OffsetXY(-(xView*xDelta),-(yView*yDelta))    def OnMouse(self, event):        hitradius = 5        if event.LeftDown():            x,y = self.ConvertEventCoords(event)            l = self.pdc.FindObjectsByBBox(x, y)#            l = self.pdc.FindObjects(x, y, hitradius)            for id in l:                if not self.pdc.GetIdGreyedOut(id):                    self.dragid = id                                         self.lastpos = (event.GetX(),event.GetY())                    break        elif event.RightDown():            x,y = self.ConvertEventCoords(event)            #l = self.pdc.FindObjectsByBBox(x, y)            l = self.pdc.FindObjects(x, y, hitradius)            if l:                self.pdc.SetIdGreyedOut(l[0], not self.pdc.GetIdGreyedOut(l[0]))                r = self.pdc.GetIdBounds(l[0])                r.Inflate(4,4)                self.OffsetRect(r)                self.RefreshRect(r, False)        elif event.Dragging() or event.LeftUp():            if self.dragid == '__main__':    app = wx.PySimpleApp()    frame = MyFrame( None )    frame.Show(True)    app.MainLoop()
Просмотров: 347 | Добавил: admin | Рейтинг: 0.0/0
Всего комментариев: 0
avatar