python - 在 wxpython 上使用 ListCtrl 拖放
问题描述
我正在按照我想知道的步骤在拖放中寻找重置选项。
- lst1 我拖到 lst2。
- 所以有重置按钮,我可以默认设置值。
- 像原版一样。`#DVS 杂烩
拖放 GUI
导入 wx
类 MyTarget(wx.TextDropTarget): def init (self, object): wx.TextDropTarget。初始化(自我) self.object = 对象
def OnDropText(self, x, y, data): self.object.InsertStringItem(0, data)
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
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))
#self.but = wx.Button(panel,-1,"Press")
for lang in languages:
self.lst1.InsertStringItem(0,lang)
#Completed--------
#self.lst2.InsertStringItem(0,lang)
dt = MyTarget(self.lst2)
self.lst2.SetDropTarget(dt)
wx.EVT_LIST_BEGIN_DRAG(self, self.lst1.GetId(), self.OnDragInit)
dt = MyTarget(self.lst1)
self.lst1.SetDropTarget(dt)
wx.EVT_LIST_BEGIN_DRAG(self, self.lst2.GetId(), 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):
languages = ['C', 'C++', 'Java', 'Python', 'Perl', 'JavaScript',
'PHP', 'VB.NET','C#']
self.lst1.SetData(languages)
#print("Hello")
pass"""
def onReset(self, event):
""""""
#||||||||Clearing the values||||||||
#-----------------------------------
self.lst1.ClearAll()
self.lst2.ClearAll()
languages = ['C', 'C++', 'Java', 'Python', 'Perl', 'JavaScript',
'PHP', 'VB.NET','C#']
self.lst1 = wx.ListCtrl(self, -1, style = wx.LC_LIST)
#self.but = wx.Button(panel,-1,"Press")
for lang in languages:
self.lst1.InsertStringItem(0,lang)
"""count = self.lst1.GetItemCount()
for row in range(count):
item = self.lst1.GetItem( itemIdx=row, col=0)
print (item.GetText())"""
#font.SetWeight(wx.FONTWEIGHT_BOLD)
# self.lst1.SetItemFont(self.index)
ex = wx.App() Mywin(None,'Drag&Drop Demo') ex.MainLoop()`
解决方案
首先请允许我列出您的代码的问题,而不是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()
推荐阅读
- php - SonarQube:删除打开标签前的多余字符
- apache-kafka - 如何在 kafka 消费者中使用 kafka avro 序列化程序编写骆驼路由器
- javascript - 设置 webpack 以在最终用户应用程序中需要文件
- java - 如何将大字符串拆分为两个不同的数组?
- jdbc - 如何关闭对logstash输出结果集中有多少行的预检查
- docker - Docker 容器保持正常运行
- oracle - 参数值 [100] 与预期类型不匹配 [java.time.LocalDateTime (n/a)]
- android - 将数据从 Fragment 传递到 DialogFragment
- r - 如何将列转换为数字,而它同时包含字符串和数字作为字符串
- android - 构造数据库以向用户尚未发送的人发送好友请求