zoukankan      html  css  js  c++  java
  • wxpython实现文件拖拽

    我想让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()
  • 相关阅读:
    页面跳转时,统计数据丢失问题探讨
    模拟form提交数据
    mysql学习问题解决
    20200824_小程序自动化测试与失败用例截图
    20200819_App自动化测试框架实战-这两天的很重要
    20200817_多点触摸操作和Hybrid应用自动化
    20200814_App元素定位&滑动操作
    20200812_adb常用命令&第一个App自动化测试脚本
    20200810_TestNG单元测试框架&App自动化环境部署
    20200807_Maven项目构建&TestNG单元测试框架
  • 原文地址:https://www.cnblogs.com/palance/p/4815065.html
Copyright © 2011-2022 走看看