2017-10-18 1 views
0

ich mit wxPythonWie lösche ich Elemente in wx.listCtrl aus einem anderen Frame?

in Schwierigkeiten bin mit

Ich habe diesen 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() 

Und von einer anderen Klasse (eine andere wx.Frame), ich versuche, die Liste auf MyForm Rahmen zu aktualisieren.

Obwohl ich die Anzahl der Elemente in Liste, aber leider kann ich die Elemente nicht löschen.

Irgendwelche Ideen?

Antwort

1

Ich fand die Lösung.

Zum einen sind PubSub

from wx.lib.pubsub import pub 

Dann habe ich neet auch die Zeichnung zu setzen, direkt nach dem Erstellen von 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') 

, ich brauche die Funktion innerhalb derselben Klasse von ListCtrl zu machen Schaffung.

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

Dann senden Sie von jeder anderen Klasse eine Nachricht, um die Liste zu aktualisieren.

pub.sendMessage('UpdateListview') 
0

MyForm().UpdateListView() erstellt eine neue Instanz von MyForm, gibt Ihnen keinen Verweis auf die vorhandene. Um dies zu tun, müssen Sie nur Ihrem anderen Frame eine Referenz geben oder eine Möglichkeit, auf die Referenz zu dem vorhandenen MyForm zuzugreifen.

+0

Ok, aber wie geht das? Warum kann ich den "GetItemCount" korrekt arbeiten lassen? –

+0

Auf die gleiche Weise wie Sie auf ein Objekt von einem anderen zugreifen, gibt es hier nichts Besonderes. Geben Sie einen Verweis auf das andere Objekt, speichern Sie es in "self", und rufen Sie dann eine Methode des anderen Objekts auf, wie 'self.otherFrame.doSomething()' – RobinDunn

Verwandte Themen