如何从另一帧删除wx.listCtrl上的项目?

时间:2017-10-18 19:51:04

标签: python python-2.7 wxpython

我在使用wxPython

时遇到了麻烦

我有这段代码

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

虽然我列出了列表中的项目数,但不幸的是,我无法删除这些项目。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

我找到了解决方案。

首先,包括pubsub

from wx.lib.pubsub import pub

然后,我在创建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')

答案 1 :(得分:0)

MyForm().UpdateListView()将创建MyForm新实例,而不会提供对现有实例的引用。要做到这一点,您只需要为您的其他框架提供参考,或者某种方式来访问对现有MyForm的引用。