我在網上搜索,很辛苦但無法找到一種方法來做到這一點。即使Robin Dunn說,當數據放入文件系統時,放置源應用程序對目標一無所知。但我想出了一個簡單的方法來做到這一點,至少在Windows上。我們只需將包含空白FileDataObject的DropSource拖動到資源管理器窗口。由於沒有數據,所有這些都會將瀏覽器窗口置於頂部,這樣我們就可以獲取用戶拖入的文件夾的路徑。首先,一定要在__init__
高清的的ListCtrl的父的事件給的ListCtrl結合起來:
def onDrag(self, event):
data = wx.FileDataObject()
obj = event.GetEventObject()
dropSource = wx.DropSource(obj)
dropSource.SetData(data)
#next line will make the drop target window come to top, allowing us
#to get the info we need to do the work, if it's Explorer
result = dropSource.DoDragDrop(0)
#get foreground window hwnd
h = win32gui.GetForegroundWindow()
#get explorer location
s = win32com.client.Dispatch("Shell.Application")
loc, outdir = None, None
for w in s.Windows():
if int(w.Hwnd) == h:
loc = w.LocationURL
if loc:
outdir = loc.split('///')[1]
outdir = urllib.unquote(outdir)
#got what we need, now download to outfol
if outdir and os.path.isdir(outdir):
self.dloadItems(event, outdir)
return
的dloadItems方法獲取:
self.lc.Bind(wx.EVT_LIST_BEGIN_DRAG, self.onDrag)
然後由事件調用的方法做到這一點從ListCtrl中選擇的項目然後(在此應用程序中)將項目從REST服務器下載到outdir。
這個解決方案當然需要pywin32擴展。
好運,
邁克
它的實際工作!謝謝! –
完整的例子在這裏https://github.com/alexbuz/wxPython-Drag-Out/blob/master/drag_out.py – olekb