+++ /dev/null
-import wx
-
-class DragController(wx.Control):
- """
- Just a little control to handle dragging the text from a text
- control. We use a separate control so as to not interfere with
- the native drag-select functionality of the native text control.
- """
- def __init__(self, parent, source, size=(25,25)):
- wx.Control.__init__(self, parent, -1, size=size,
- style=wx.SIMPLE_BORDER)
- self.source = source
- self.SetMinSize(size)
- self.Bind(wx.EVT_PAINT, self.OnPaint)
- self.Bind(wx.EVT_LEFT_DOWN, self.OnLeftDown)
-
- def OnPaint(self, evt):
- # draw a simple arrow
- dc = wx.BufferedPaintDC(self)
- dc.SetBackground(wx.Brush(self.GetBackgroundColour()))
- dc.Clear()
- w, h = dc.GetSize()
- y = h/2
- dc.SetPen(wx.Pen("dark blue", 2))
- dc.DrawLine(w/8, y, w-w/8, y)
- dc.DrawLine(w-w/8, y, w/2, h/4)
- dc.DrawLine(w-w/8, y, w/2, 3*h/4)
-
- def OnLeftDown(self, evt):
- text = self.source.GetValue()
- data = wx.TextDataObject(text)
- dropSource = wx.DropSource(self)
- dropSource.SetData(data)
- result = dropSource.DoDragDrop(wx.Drag_AllowMove)
-
- # if the user wants to move the data then we should delete it
- # from the source
- if result == wx.DragMove:
- self.source.SetValue("")
-
-class MyFrame(wx.Frame):
- def __init__(self):
- wx.Frame.__init__(self, None, title="Drop Source")
- p = wx.Panel(self)
-
- # create the controls
- label1 = wx.StaticText(p, -1, "Put some text in this control:")
- label2 = wx.StaticText(p, -1,
- "Then drag from the neighboring bitmap and\n"
- "drop in an application that accepts dropped\n"
- "text, such as MS Word.")
- text = wx.TextCtrl(p, -1, "Some text")
- dragctl = DragController(p, text)
-
- # setup the layout with sizers
- sizer = wx.BoxSizer(wx.VERTICAL)
- sizer.Add(label1, 0, wx.ALL, 5)
- hrow = wx.BoxSizer(wx.HORIZONTAL)
- hrow.Add(text, 1, wx.RIGHT, 5)
- hrow.Add(dragctl, 0)
- sizer.Add(hrow, 0, wx.EXPAND|wx.ALL, 5)
- sizer.Add(label2, 0, wx.ALL, 5)
- p.SetSizer(sizer)
- sizer.Fit(self)
-
-
-app = wx.PySimpleApp()
-frm = MyFrame()
-frm.Show()
-app.MainLoop()