如何从另一个框架中删除wx.listCtrl上的项目?
问题描述:
我有难同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()
虽然我得到列表中的项目的数量,但不幸的是,我不能删除项目。
任何想法?
答
我找到了解决方案。
首先,包括发布 - 订阅
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')
答
MyForm().UpdateListView()
将创建一个新实例的MyForm
,不给你一个现有的参考。要做到这一点,你只需要给你的其他框架的参考,或某种方式来访问现有MyForm
的参考。
好吧,但如何做到这一点?另外,为什么我可以获得“GetItemCount”工作正常? –
就像你从别人访问任何对象一样,这里没有什么特别的关于框架。给一个引用另一个对象,保存在'self'中,然后当你需要它时,调用另一个对象的方法,比如'self.otherFrame.doSomething()' – RobinDunn