Помогите с пользовательским интерфейсом в wxpython - PullRequest
0 голосов
/ 20 июля 2010

Я новичок в wxPython, так что терпите меня.Я создаю пользовательский графический интерфейс, и мне нужно получить два атрибута.Во-первых, я хочу создать внутреннюю границу другого цвета (одиночная темная граница выглядит слишком простой).Во-вторых, мне нужно связать атрибут перетаскивания, чтобы только метка позволяла перетаскивать, а не весь кадр.

Также у кого-нибудь есть хороший учебник по обработке геометрии wxPython?

import wx

def GetRoundBitmap( w, h, r ):
    maskColor = wx.Color(0,0,0)
    shownColor = wx.Color(5,5,5)
    b = wx.EmptyBitmap(w,h)
    dc = wx.MemoryDC(b)
    dc.SetBrush(wx.Brush(maskColor))
    dc.DrawRectangle(0,0,w,h)
    dc.SetBrush(wx.Brush(shownColor))
    dc.SetPen(wx.Pen(shownColor))
    dc.DrawRoundedRectangle(0,0,w,h,r)
    dc.SelectObject(wx.NullBitmap)
    b.SetMaskColour(maskColor)
    return b

def GetRoundShape( w, h, r ):
    return wx.RegionFromBitmap( GetRoundBitmap(w,h,r) )

class FancyFrame(wx.Frame):
    def __init__(self):
        style = ( wx.CLIP_CHILDREN | wx.STAY_ON_TOP | wx.FRAME_NO_TASKBAR |
              wx.NO_BORDER | wx.FRAME_SHAPED  )
        wx.Frame.__init__(self, None, title='Fancy', style = style)
        self.SetSize( (250, 40) )
        self.SetPosition( (500,500) )
        self.SetTransparent( 160 )

        self.Bind(wx.EVT_KEY_UP, self.On_Esc)
        self.Bind(wx.EVT_MOTION, self.OnMouse)
        self.Bind(wx.EVT_PAINT, self.OnPaint)
        if wx.Platform == '__WXGTK__':
            self.Bind(wx.EVT_WINDOW_CREATE, self.SetRoundShape)
        else:
            self.SetRoundShape()

        self.Show(True)

        geo = wx.GridBagSizer()
        self.label = wx.StaticText(self,-1,label=u'Hello !')
        geo.Add(self.label, (0,2))

    def SetRoundShape(self, event=None):
        w, h = self.GetSizeTuple()
        self.SetShape(GetRoundShape( w,h, 10 ) )


    def OnPaint(self, event):
        dc = wx.PaintDC(self)
        dc = wx.GCDC(dc)
        w, h = self.GetSizeTuple()
        r = 10
        dc.SetPen( wx.Pen("#000000", width = 4 ) )
        dc.SetBrush( wx.Brush("#9e9e9e") )
        dc.DrawRoundedRectangle( 0,0,w,h,r )

    def On_Esc(self, event):
        """quit if user press Esc"""
        if event.GetKeyCode() == 27 : #27 is Esc
            self.Close(force=True)
        else:
            event.Skip()

     def OnMouse(self, event):
        """implement dragging"""
        if not event.Dragging():
            self._dragPos = None
            return
        self.CaptureMouse()
        if not self._dragPos:
            self._dragPos = event.GetPosition()
        else:
            pos = event.GetPosition()
            displacement = self._dragPos - pos
            self.SetPosition( self.GetPosition() - displacement )



app = wx.App()
f = FancyFrame()
app.MainLoop()

1 Ответ

0 голосов
/ 20 июля 2010

Я не уверен, какую границу вы хотите изменить. Вы говорите о границе выделенного объекта? Что касается перетаскивания объектов, я бы рекомендовал взглянуть на Whyteboard, программу рисования wxPython. Это должно как выбрать и перетащить объекты вокруг довольно хорошо и работать на Windows и Linux. Я не уверен насчет Mac ...

Редактировать: Забыл добавить ссылку: http://whyteboard.org/


Майк Дрисколл

Блог: http://blog.pythonlibrary.org

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...