drop_source.py

来自「wxPython的基本示例程序」· Python 代码 · 共 71 行

PY
71
字号
import wxclass 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()

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?