wxPython wx.EVT_LIST_ITEM_SELECTED 在同一项目连续单击两次时不起作用 [英] wxPython wx.EVT_LIST_ITEM_SELECTED Not Working When Same Item is Clicked Twice in a Row

查看:25
本文介绍了wxPython wx.EVT_LIST_ITEM_SELECTED 在同一项目连续单击两次时不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下 wxPython 面板的代码,我试图在其中向用户显示所有州,但我只希望他们能够选择(或检查)马萨诸塞州或纽约州.当用户在该状态上单击一次时,这会起作用,因为会调用 wx.EVT_LIST_ITEM_SELECTED 事件,但是如果您一直单击同一状态,则不会调用该事件.只有当用户点击不同的状态时才会再次调用它.我曾尝试使用 wx.PyEvtHandler 来捕获事件并找出当我单击某个项目时会发生哪些事件,但我始终看到的唯一事件是鼠标左键单击事件,它没有 GetIndex 属性.我是否错过了一个事件,它告诉我用户仍然在同一个列表项上,因此没有调用 SELECTED 或 DESELECTED?非常感谢任何帮助.

I have the below code for a wxPython panel in which I am trying show the user all the states, but I only want them to be able to select (or check) either Massachusetts or New York. This works when the user clicks once on that state, as the wx.EVT_LIST_ITEM_SELECTED event is called, but if you keep clicking on the same state, this event is not called. It is only called again if the user clicks on a different state. I have tried using a wx.PyEvtHandler to capture the events and find out which ones happen when I click on an item, but the only one I consistently see is the left mouse click event, which doesn't have a GetIndex attribute. Am I missing an event that is telling me that the user is still on the same list item and therefore is not calling either SELECTED or DESELECTED? Any help is greatly appreciated.

import wx,wx.grid, ExampleImages #legend images
from ObjectListView import GroupListView, ColumnDefn, ObjectListView
class NEWLIST(wx.Panel):
"""Create a new information panel"""
def __init__(self, parent, INFOB):
    wx.Panel.__init__(self, size=(-1, 460), parent=parent, id=wx.ID_ANY)
    self.dataOlv = GroupListView(self, wx.ID_ANY, style=wx.LC_REPORT|wx.SUNKEN_BORDER)
    self.dataOlv.useExpansionColumn = True
    #----------------------------------------------------------------------
    myimgsdict = {}
    def myImageGetter(item):
        k = item.code.capitalize()
        myimgsdict[item.code] = self.dataOlv.AddImages(eval("ExampleImages.get%s16Bitmap()"%k))
        if item in INFOB.list.dataOlv.GetCheckedObjects() and item.code in ('MA','NY'):
            return myimgsdict[item.code]
    #----------------------------------------------------------------------
    self.statacolumn = ColumnDefn("Country", "left",  130, "state", useInitialLetterForGroupKey=True,isSpaceFilling=True)
    self.legendcolumn = ColumnDefn("" , "left",  16,  "legend" , imageGetter=myImageGetter)
    self.totalcolumn = ColumnDefn("Total"  , "right", 70,  "total")
    self.inviscolumn = ColumnDefn("" , "right", 0,  "region")

    self.dataOlv.SetColumns([self.statecolumn, self.legendcolumn, self.totalcolumn, self.inviscolumn])
    self.dataOlv.InstallCheckStateColumn(self.statecolumn)
    self.dataOlv.SetSortColumn(self.dataOlv.columns[2])
    #----------------------------------------------------------------------
    # Create some sizers
    mainSizer = wx.BoxSizer(wx.VERTICAL)
    mainSizer.Add(self.dataOlv, 1, wx.ALL|wx.EXPAND, 5)
    self.SetSizer(mainSizer)
    #----------------------------------------------------------------------
    def OnItemSelected(event):
        """Action for when item is seleted by the user"""
        realIndex = INFOB.list.dataOlv[event.GetIndex()]
        if realIndex.code not in ('MA','NY'):
            self.dataOlv.Uncheck(realIndex)
    #----------------------------------------------------------------------
    self.dataOlv.Bind(wx.EVT_LIST_ITEM_SELECTED, OnItemSelected)
    self.dataOlv.Bind(wx.EVT_LIST_ITEM_ACTIVATED, OnItemSelected)
    #self.dataOlv.Bind(wx.EVT_COMMAND_LEFT_CLICK, OnItemSelected)
    self.dataOlv.Bind(wx.EVT_LIST_ITEM_DESELECTED, OnItemSelected)
    self.dataOlv.Bind(wx.EVT_LIST_CACHE_HINT, OnItemSelected)

谢谢!

推荐答案

您可能希望使用鼠标单击事件而不是项目选择事件;迈克·德里斯科尔是对的.

You would want to use a mouse click event rather than an item selected event; Mike Driscoll is right.

这篇关于wxPython wx.EVT_LIST_ITEM_SELECTED 在同一项目连续单击两次时不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆