使用 wxFormBuilder 用于 Python 的 DragNDrop

问题描述 投票:0回答:1

我现有的 wxPython 应用程序基于 wxFormBuilder 骨架。 它将接受新的图像文件并通过文件选择器对话框进行处理。 现在,我想让拖放功能可用,但我不知道如何去做。 在检查了图像面板的属性选项后,我看到了“drop_accept_files”选项。当我选中该框并生成 Python 代码时,我确实看到为此生成了新代码

self.m_panelImage = wx.Panel( self.m_splitterMain, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL )
self.m_panelImage.DragAcceptFiles( True )  **<<<< new line of added code**

所有这些听起来都非常有前途和有趣,但我一直无法弄清楚如何连接到这个设施并使用它。 任何人都可以为我指明正确的方向,或者知道一个可以回顾的好例子吗? TIA

python-3.x drag-and-drop wxpython wxformbuilder
1个回答
0
投票

一旦你说 wxFormBuilder,我的目光就会变得呆滞,因为我总是直接编码,所以这可能有帮助,也可能没有帮助。

您需要绑定到

EVT_DROP_EVENT
才能知道某些内容已被删除,并设置
target
来处理删除的内容。

这是一个示例,遗憾的是没有涉及 wxFrameBuilder:

import wx
import wx.lib.newevent

drop_event, EVT_DROP_EVENT = wx.lib.newevent.NewEvent()

class FileDropTarget(wx.FileDropTarget):
    def __init__(self, obj, multiple_allowed=False):
        wx.FileDropTarget.__init__(self)
        self.obj = obj
        self.multiple_allowed = multiple_allowed

    def OnDropFiles(self, x, y, filenames):
        filename = filenames[0]
        evt = drop_event(data=filename)
        wx.PostEvent(self.obj, evt)
        return True


class MyFrame(wx.Frame):
    def __init__(self, parent, title):
        super(MyFrame, self).__init__(parent, style = wx.DEFAULT_FRAME_STYLE,
                            title=title, size=(500, 500))
        self.panel = wx.Panel(self, size = (-1, -1))
        self.bmp = wx.Bitmap()
        self.bitmap = wx.StaticBitmap(self.panel, -1, self.bmp)

        self.file_drop_target = FileDropTarget(self, multiple_allowed=False)
        self.SetDropTarget(self.file_drop_target)
        self.Bind(EVT_DROP_EVENT, self.OnDropEvent)

    def OnDropEvent(self, event):
        drop_filename = event.data
        self.bitmap.SetBitmap(wx.Bitmap(drop_filename, wx.BITMAP_TYPE_ANY))
        self.Refresh()
        return

if __name__ == "__main__":
    app = wx.App()
    MainFrame = MyFrame(None, title = "Drop Image")
    MainFrame.Show()
    MainFrame.Centre()
    app.MainLoop()
© www.soinside.com 2019 - 2024. All rights reserved.