Поскольку мы реагируем на event
удаление файла, имеет смысл также назначить обработку событию.
Представляя wx.lib.newevent
:
здесь мы создаем наше собственное событие (EVT_DROP_EVENT) и назначьте ему метку (drop_event).
drop_event, EVT_DROP_EVENT = wx.lib.newevent.NewEvent()
Теперь у нас есть событие для bind
, и мы можем назначить ему процедуру обратного вызова, в данном случае LabelTextUpdate
.
self.Bind(EVT_DROP_EVENT, self.LabelTextUpdate)
Когда файл удаляется, мы устанавливаем событие и запускаем его:
evt = drop_event(data=TempTxt)
wx.PostEvent(self.obj,evt)
Процедура обратного вызова вызывается из-за привязки к EVT_DROP_EVENT, и в этой процедуре мы обрабатываем данные.
Надеюсь, это понятно (см. Ниже).
import wx
import wx.lib.newevent
drop_event, EVT_DROP_EVENT = wx.lib.newevent.NewEvent()
class MyFileDropTarget(wx.FileDropTarget):
def __init__(self, obj):
wx.FileDropTarget.__init__(self)
self.obj = obj
def OnDropFiles(self, x, y, filename):
#filename is a list of 1 or more files
#here we are assuming only 1 file
TempTxt = filename[0]
evt = drop_event(data=TempTxt)
wx.PostEvent(self.obj,evt)
return True
class Example(wx.Frame):
def __init__(self, parent, title):
super(Example, self).__init__(parent, title=title)
self.InitUI()
self.Center()
def InitUI(self):
panel = wx.Panel(self)
FileDrTr = MyFileDropTarget(self)
font = wx.SystemSettings.GetFont(wx.SYS_SYSTEM_FONT)
font.SetPointSize(9)
verBox = wx.BoxSizer(wx.VERTICAL)
horBoxOne = wx.BoxSizer(wx.HORIZONTAL)
TextLabel = wx.StaticText(panel, label = 'Drop file here')
TextLabel.SetFont(font)
horBoxOne.Add(TextLabel, flag=wx.RIGHT, border=10)
DropePlace = wx.TextCtrl(panel)
DropePlace.SetDropTarget(FileDrTr)
#Bind the drop event listener
self.Bind(EVT_DROP_EVENT, self.LabelTextUpdate)
horBoxOne.Add(DropePlace, proportion=1)
verBox.Add(horBoxOne, flag=wx.EXPAND|wx.LEFT|wx.RIGHT|wx.TOP, border=10)
verBox.Add((-1, 10))
horBoxTwo = wx.BoxSizer(wx.HORIZONTAL)
self.NewText = wx.StaticText(panel, label = 'Path will be')
horBoxTwo.Add(self.NewText, flag=wx.RIGHT, border=5)
verBox.Add(horBoxTwo, flag=wx.EXPAND|wx.LEFT|wx.RIGHT|wx.TOP, border=10)
panel.SetSizer(verBox)
def LabelTextUpdate(self, event):
txt = event.data
self.NewText.SetLabel(txt)
def main():
app = wx.App()
ex = Example(None, title = 'drop and see file path')
ex.Show()
app.MainLoop()
if __name__ == '__main__':
main()