Перетащите с помощью ListCtrl на wxpython - PullRequest
0 голосов
/ 08 ноября 2018

Я ищу параметр Сброс в перетаскивании, следуя инструкциям, которые я хочу знать.

  1. lst1 я перетаскиваю на lst2.
  2. Итак, есть кнопка сброса, которую я могу установить значения по умолчанию.
  3. Как оригинал. `#DVS chowdary

Перетаскивание GUI

импорт wx

class MyTarget (wx.TextDropTarget): def init (self, object): wx.TextDropTarget. INIT (Я) self.object = object

def OnDropText (self, x, y, data): self.object.InsertStringItem (0, данные)

класс 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 (Нет, «Drag & Drop Demo») ex.MainLoop () `

1 Ответ

0 голосов
/ 08 ноября 2018

Сначала позвольте мне перечислить проблемы с вашим кодом, кроме проблемы 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...