2017-10-18 43 views
0

Je courais en difficulté avec wxPythonComment supprimer des éléments sur wx.listCtrl d'une autre image?

J'ai ce code

class MyForm(wx.Frame): 
# ---------------------------------------------------------------------- 
def __init__(self): 
    wx.Frame.__init__(self, None, wx.ID_ANY, "Lapop - Αδειες Υπαλλήλων", size = (700,400)) 

    # Add a panel so it looks the correct on all platforms 
    panel = wx.Panel(self, wx.ID_ANY) 
    self.list_ctrl = wx.ListCtrl(panel, size=(680, 340), 
           style=wx.LC_REPORT 
             | wx.BORDER_SUNKEN 
           ) 
    self.list_ctrl.Bind(wx.EVT_COMMAND_LEFT_DCLICK, self.DoubleClick) 
    self.list_ctrl.InsertColumn(0, 'ID',width=40) 
    self.list_ctrl.InsertColumn(1, 'Name', width=250) 
    self.list_ctrl.InsertColumn(2, 'Row1', width=150) 
    self.list_ctrl.InsertColumn(3, 'Row2', width=150) 

    sizer.Add(self.list_ctrl, 0, wx.ALL | wx.EXPAND, 5) 


    panel.SetSizer(sizer) 

# ---------------------------------------------------------------------- 

def UpdateListView(self): 
    self.list_ctrl.DeleteAllItems() 
    print self.list_ctrl.GetItemCount() 

Et d'une autre classe (une autre wx.Frame), j'essaie de mettre à jour la liste sur le cadre de MonFormulaire. Bien que j'obtiens le nombre d'éléments dans la liste, mais malheureusement, je ne peux pas supprimer les éléments.

Des idées?

Répondre

1

J'ai trouvé la solution.

En premier lieu, comprennent PubSub

from wx.lib.pubsub import pub 

Ensuite, je Neet pour régler le abonnent, juste après la création de ListCtrl

self.list_ctrl = wx.ListCtrl(panel, size=(680, 340), 
           style=wx.LC_REPORT 
             | wx.BORDER_SUNKEN 
           ) 
self.list_ctrl.Bind(wx.EVT_COMMAND_LEFT_DCLICK, self.DoubleClick) 
pub.subscribe(self.UpdateListView, 'UpdateListview') 

aussi, je dois faire fonctionner à l'intérieur même classe de ListCtrl création.

def UpdateListView(self): 
    self.list_ctrl.DeleteAllItems() 
    #Do something else 

Puis, à partir de n'importe quelle autre classe, vous venez d'envoyer un message pour mettre à jour la liste.

pub.sendMessage('UpdateListview') 
0

MyForm().UpdateListView() va créer une nouvelle instance de MyForm, ne pas vous donner une référence à l'existant. Pour ce faire, vous avez juste besoin de donner une référence à votre autre image, ou un moyen d'accéder à la référence à l' existant.

+0

Ok, mais comment faire? Aussi, pourquoi je peux obtenir le "GetItemCount" correclty de travail? –

+0

De la même manière que vous accédez à un objet depuis un autre, il n'y a rien de spécial à propos des images ici. Donnez une référence à l'autre objet, enregistrez-le dans 'self', et quand vous en avez besoin, vous appelez une méthode de l'autre objet, comme' self.otherFrame.doSomething() ' – RobinDunn