Сначала позвольте мне перечислить проблемы с вашим кодом, кроме проблемы Reset
.
Ваше отступление - беспорядок, который затрудняет понимание, и поэтому многие люди, которые могут ответить на ваш вопрос, просто не будут беспокоиться.
Сделайте так, чтобы людям было легко отвечать на ваши вопросы.
Вы, кажется, используете очень старую версию wxPython
или учебник, многие элементы устарели.
Метод Связывания событий является историческим.
InsertStringItem
устарело.
В MyTarget(wx.TextDropTarget)
обе init
ссылки должны быть __init__
MyTarget(wx.TextDropTarget)
должен вернуть True
languages
можно определить только один раз.
Наконец, используйте self.Update
в конце OnReset
, чтобы снова отобразить списки.
Проверьте разницу между вашим кодом и тем, что ниже.
import wx
class MyTarget(wx.TextDropTarget):
def __init__(self, object):
wx.TextDropTarget.__init__(self)
self.object = object
def OnDropText(self, x, y, data):
self.object.InsertItem(0, data)
return True
class Mywin(wx.Frame):
def __init__(self, parent, title):
super(Mywin, self).__init__(parent, title = title,size = (-1,300))
panel = wx.Panel(self)
self.index = 0
box = wx.BoxSizer(wx.HORIZONTAL) #horizontal line
self.languages = ['C', 'C++', 'Java', 'Python', 'Perl', 'JavaScript',
'PHP', 'VB.NET','C#']
self.lst1 = wx.ListCtrl(panel, -1, style = wx.LC_LIST)
self.lst2 = wx.ListCtrl(panel, -1, style = wx.LC_LIST)
self.display = wx.Button(panel,label="Reset",pos=(10,90))
for lang in self.languages:
self.lst1.InsertItem(0,lang)
#Completed--------
#self.lst2.InsertStringItem(0,lang)
dt = MyTarget(self.lst2)
self.lst2.SetDropTarget(dt)
self.lst1.Bind(wx.EVT_LIST_BEGIN_DRAG, self.OnDragInit)
dt = MyTarget(self.lst1)
self.lst1.SetDropTarget(dt)
self.lst2.Bind(wx.EVT_LIST_BEGIN_DRAG, self.OnDragInit1)
#Completed++++++++++
self.display.Bind(wx.EVT_BUTTON,self.onReset)
box.Add(self.lst1,1,wx.EXPAND)
box.Add(self.lst2, 1, wx.EXPAND)
box.Add(self.display,1,wx.EXPAND)
panel.SetSizer(box)
panel.Fit()
self.Centre()
self.Show(True)
def OnDragInit(self, event):
text = self.lst1.GetItemText(event.GetIndex())
tobj = wx.TextDataObject(text)
src = wx.DropSource(self.lst1)
src.SetData(tobj)
src.DoDragDrop(True)
self.lst1.DeleteItem(event.GetIndex())
def OnDragInit1(self,event):
text = self.lst2.GetItemText(event.GetIndex())
tobj = wx.TextDataObject(text)
src = wx.DropSource(self.lst2)
sit = src.SetData(tobj)
src.DoDragDrop(True)
self.lst2.DeleteItem(event.GetIndex())
def onReset(self, event):
#||||||||Clearing the values||||||||
#-----------------------------------
self.lst1.ClearAll()
self.lst2.ClearAll()
for lang in self.languages:
self.lst1.InsertItem(0,lang)
self.Update()
ex = wx.App()
Mywin(None,'Drag&Drop Demo')
ex.MainLoop()