2017-10-18 74 views
0

我有難同wxPython的如何從另一個框架中刪除wx.listCtrl上的項目?

運行我有這樣的代碼

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() 

而且從另一個類(另一個wx.Frame),我嘗試更新MyForm的框架上的列表中。

MyForm().UpdateListView() 

雖然我得到列表中的項目的數量,但不幸的是,我不能刪除項目。

任何想法?

回答

1

我找到了解決方案。

首先,包括髮布 - 訂閱

from wx.lib.pubsub import pub 

然後,我NEET設置訂閱,的的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') 

的創建之後還,我需要做同一類的ListCtrl的內部功能創建。

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

然後,您可以從任何其他類中發送消息更新列表。

pub.sendMessage('UpdateListview') 
0

MyForm().UpdateListView()將創建一個新實例MyForm,不給你一個現有的參考。要做到這一點,你只需要給你的其他框架的參考,或某種方式來訪問現有MyForm的參考。

+0

好吧,但如何做到這一點?另外,爲什麼我可以獲得「GetItemCount」工作正常? –

+0

就像你從別人訪問任何對象一樣,這裏沒有什麼特別的關於框架。給一個引用另一個對象,保存在'self'中,然後當你需要它時,調用另一個對象的方法,比如'self.otherFrame.doSomething()' – RobinDunn

相關問題