2017-10-18 73 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

相关问题