在wxpython上使用ListCtrl拖放

在wxpython上使用ListCtrl拖放,python,wxpython,Python,Wxpython,我正在按照我想知道的步骤在拖放中寻找重置选项 lst1我正在拖到lst2 所以有一个重置按钮,我可以设置默认值 像原作一样。 `#乔达里酒店 拖放GUI 导入wx 类MyTarget(wx.TextDropTarget): definit(自身,对象): wx.TextDropTarget.init(self) self.object=对象 def OnDropText(自身、x、y、数据): self.object.InsertStringItem(0,数据) Mywin类(wx.Frame)

我正在按照我想知道的步骤在拖放中寻找重置选项

  • lst1我正在拖到lst2
  • 所以有一个重置按钮,我可以设置默认值
  • 像原作一样。 `#乔达里酒店
  • 拖放GUI 导入wx

    类MyTarget(wx.TextDropTarget): definit(自身,对象): wx.TextDropTarget.init(self) self.object=对象

    def OnDropText(自身、x、y、数据): self.object.InsertStringItem(0,数据)

    Mywin类(wx.Frame):

    ex=wx.App() Mywin(无,“拖放演示”)
    exp.MainLoop()`

    首先,请允许我列出代码中的问题,而不是
    重置问题

    你的缩进是一团乱麻,这使得它很难理解,因此许多人谁可以回答你的问题,根本不会麻烦

    让人们更容易回答你的问题

    您似乎正在使用非常旧版本的
    wxPython
    或教科书,许多项目已弃用

    绑定事件的方法是历史性的

    InsertStringItem
    已弃用

    MyTarget(wx.TextDropTarget)
    中,两个
    init
    引用都应该是
    \uuuu init\uuuu

    MyTarget(wx.TextDropTarget)
    应返回
    True

    语言
    只能定义一次

    最后,使用重置后的
    OnReset
    末尾的
    self.Update
    重新显示列表

    检查您的代码与下面的代码之间的差异

    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()
    

    感谢萨克森州的罗尔夫,并为给您带来的不便表示歉意。
    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()