#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中的拖动源
最新推荐文章于 2024-09-15 22:31:42 发布