python中的拖动源

#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()

你可能感兴趣的:(python)