wxpython实现文件拖拽

2023-02-14,,

我想让wx.grid里面的单元格能够支持文件拖拽,实现起来挺简单的,共分3步:

1、创建一个wx.FileDropTarget子类的对象,并把要支持拖拽的控件传给它的构造函数,此处是grid

2、调用grid的SetDropTarget函数,并将第1步创建的wx.FileDropTarget子类对象传给它

3、实现第1步创建的wx.FileDropTarget的子类,并覆盖OnDropFiles函数

贴出代码如下:

import wx
import wx.grid
import logging
import os # 第3步,实现wx.FileDropTarget子类
class FileDrop(wx.FileDropTarget):
def __init__(self, grid):
wx.FileDropTarget.__init__(self)
self.grid = grid def OnDropFiles(self, x, y, filePath): # 当文件被拖入grid后,会调用此方法
cellCoords = self.grid.XYToCell(x, y) # 根据坐标轴换算被拖入grid网格的行号和列号
filename = os.path.basename(filePath[0])
self.grid.SetCellValue(cellCoords.GetRow(), cellCoords.GetCol(), filename) # 将文件名赋给被拖入的cell class MyFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, -1, 'MyFrame', size = (640, 480))
panel = wx.Panel(self, -1) vSizer = wx.BoxSizer(wx.VERTICAL)
self.grid = wx.grid.Grid(panel, -1)
self.grid.CreateGrid(10, 3) sizer = wx.BoxSizer(wx.HORIZONTAL)
sizer.Add(self.grid, 1, wx.ALL | wx.EXPAND, 5)
vSizer.Add(sizer, 1, wx.ALL | wx.EXPAND) panel.SetSizer(vSizer)
self.fileDrop = FileDrop(self.grid) # 第1步,创建FileDrop对象,并把grid传给初始化函数
self.grid.SetDropTarget(self.fileDrop) # 第2步,调用grid的SetDropTarget函数,并把FileDrop对象传给它 class MainApp(wx.App):
def __init__(self, redirect = False, filename = None):
wx.App.__init__(self, redirect, filename) def OnInit(self):
self.frame = MyFrame()
self.frame.Show()
self.frame.Center()
return True app = MainApp()
app.MainLoop()

wxpython实现文件拖拽的相关教程结束。

《wxpython实现文件拖拽.doc》

下载本文的Word格式文档,以方便收藏与打印。