我在使用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()
虽然我列出了列表中的项目数,但不幸的是,我无法删除这些项目。
有什么想法吗?
答案 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
的引用。