gpt4 book ai didi

python - 响应 Listctrl 变化恰好一次

转载 作者:太空宇宙 更新时间:2023-11-03 15:28:21 24 4
gpt4 key购买 nike

我正在使用 wxPython 处理一个表单,我希望 listctrl 的值列表根据另一个 listctrl 的选择而改变。为此,我使用链接到控制对象的 EVT_LIST_ITEM_SELECTEDEVT_LIST_ITEM_DESELECTED 事件的方法来调用 Publisher.sendMessage。要更改的控件有一个方法,该方法是该发布者的订阅者。这是有效的:当第一个 listctrl 被点击时,第二个被刷新。

问题是必须从数据库中刷新数据,并且每次选择和取消选择都会发送一条消息。这意味着即使我只是单击一个项目,数据库也会被查询两次(一次用于取消选择,然后再次用于选择)。如果我按住 Shift 键并单击以多选 5 个项目,则会调用 5 个电话。有没有办法让 listctrl 响应集合,而不是单个选择?

最佳答案

最好的解决方案似乎是使用带有标志的wx.CallAfter来执行后续过程恰好一次:

import wx

class MyFrame(wx.Frame):
def __init__(self, *args, **kwds):
wx.Frame.__init__(self, *args, **kwds)
self.list_ctrl_1 = wx.ListCtrl(self, -1, style=wx.LC_REPORT|wx.SUNKEN_BORDER)
sizer_1 = wx.BoxSizer(wx.HORIZONTAL)
sizer_1.Add(self.list_ctrl_1, 1, wx.EXPAND, 0)
self.list_ctrl_1.InsertColumn(0,"1")
self.list_ctrl_1.InsertStringItem(0,"HELLO1")
self.list_ctrl_1.InsertStringItem(0,"HELLO2")
self.list_ctrl_1.InsertStringItem(0,"HELLO3")
self.list_ctrl_1.InsertStringItem(0,"HELLO4")
self.list_ctrl_1.InsertStringItem(0,"HELLO5")
self.list_ctrl_1.InsertStringItem(0,"HELLO6")
self.Bind(wx.EVT_LIST_ITEM_SELECTED, self.OnItemSelected, self.list_ctrl_1)
self.Bind(wx.EVT_LIST_ITEM_DESELECTED, self.OnItemDeselected, self.list_ctrl_1)
self.dirty = False
def Cleanup(self, StringToPrint):
print 'No Longer Dirty!'
self.dirty = False

def OnItemSelected(self,event):
print str(self.__class__) + " - OnItemSelected"
if not self.dirty:
self.dirty = True
wx.CallAfter(self.Cleanup)
event.Skip()

def OnItemDeselected(self,event):
print str(self.__class__) + " - OnItemDeselected"
if not self.dirty:
self.dirty = True
wx.CallAfter(self.Cleanup)
event.Skip()

if __name__ == "__main__":
app = wx.PySimpleApp(0)
wx.InitAllImageHandlers()
frame_1 = MyFrame(None, -1, "")
app.SetTopWindow(frame_1)
frame_1.Show()
app.MainLoop()

关于python - 响应 Listctrl 变化恰好一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3441991/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com