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