tkinterにくらべて、ウィンドウ作成の部分に手間をかけているが、やっていることは以下の通り。
まず、wx.FileDropTargetを継承したクラスを作成して、 ファイルがドロップされた時に実行されるOnDropFiles()を 自分の望むように書き換える。
さらに、wx.PanelのSetDropTarget()メソッドを用いて、 作成したFileDropTargetを継承したクラスのインスタンスを設定するだけである。 実行すると、ウィンドウが開き、その中に配置されたパネルにファイルをドロップすると、 そのパスがコンソールに表示される。
import wx class MyFileDropTarget(wx.FileDropTarget): def __init__(self): super(MyFileDropTarget, self).__init__() def OnDropFiles(self, x, y, filenames): for n in filenames: print(x, y, n) return True class DropPanel(wx.Panel): def __init__(self, parent, *args, **kwargs): super(DropPanel, self).__init__(parent, *args, **kwargs) self.droptarget = MyFileDropTarget() self.SetDropTarget(self.droptarget) class MyFrame(wx.Frame): def __init__(self, *args, **kwargs): super(MyFrame, self).__init__(*args, **kwargs) self.panel = DropPanel(self, size=(300, 300)) sizer = wx.BoxSizer(wx.VERTICAL) sizer.Add(self.panel, 1, wx.EXPAND) self.SetSizer(sizer) self.Fit() class MyApp(wx.App): def __init__(self): wx.App.__init__(self, False) def OnInit(self): self.frame = MyFrame(None, title=AppName) #self.SetTopWindow(self.frame) self.frame.Show() return True if __name__ == '__main__': AppName = "DnD Test" app = MyApp() app.MainLoop()
0 件のコメント:
コメントを投稿