在wxpython上使用listcrll拖放

2024-06-28 11:22:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在寻找重置选项在拖放下面的步骤,我想知道。在

  1. lst1我要拖到lst2。在
  2. 所以有一个重置按钮,我可以设置默认值。在
  3. 像是原创的。 `#DVS乔达里

拖放GUI

导入wx

目标MyClass(wx.TextDropTarget): definit(自身,对象): wx.TextDropTarget.init(自身) 自我对象object=对象

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

我的班(wx.框架)公司名称:

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.应用程序() Mywin(无,拖放演示) 前主回路()`


Tags: textselfsrcboxeventlangdefdt
1条回答
网友
1楼 · 发布于 2024-06-28 11:22:49

首先,请允许我列出您代码中的问题,而不是Reset问题。在

你的缩进是一团混乱,这使你很难理解,因此许多能回答你问题的人,根本就不会费心。在

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

您似乎在使用wxPython或文本书的非常旧的版本,许多项目都不推荐使用。在

约束事件的方法是历史性的。在

InsertStringItem已弃用。在

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

MyTarget(wx.TextDropTarget)应返回True

languages只能定义一次。在

最后,在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()

相关问题 更多 >