#coding=utf-8 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) 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)#执行释放 #iftheuserwantstomovethedatathenweshoulddeleteit #fromthesource if result== wx.DragMove: self.source.SetValue("")#如果需要的话,删除源中的数据 class MyFrame(wx.Frame): def __init__(self): wx.Frame.__init__(self,None,title="DropSource") self.SetSize((400,400)) p=wx.Panel(self) #createthecontrols label1=wx.StaticText(p,-1,"Put some text in this control:",size=(200,100)) label2=wx.StaticText(p,-1, "Then drag from the neighboring bitmap and\n" "drop in an application that accepts dropped\n" "text,such as MSWord.",size=(200,100)) text=wx.TextCtrl(p,-1,"Sometext") dragctl=DragController(p,text) #setupthelayoutwithsizers 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) p.SetSizer(sizer) sizer.Fit(self) app=wx.PySimpleApp() frm=MyFrame() frm.Show() app.MainLoop()