【问题标题】:wxpython ListCtrl can't change selected item colourwxpython ListCtrl 无法更改所选项目的颜色
【发布时间】:2019-12-28 07:40:14
【问题描述】:

作为标题,我不明白为什么我不能更改所选项目的背景颜色。这是我的代码...

self.listaFatture = wx.ListCtrl(self, size=(frame.GetSize().Width - 30, frame.GetSize().Height - 250), style=wx.LC_REPORT)
.....

self.listaFatture.Bind(wx.EVT_LIST_ITEM_SELECTED, self.SelezionaFatturaColore)

.....

def SelezionaFatturaColore(self,event):
    print('Selezionato')
    index= event.GetIndex()
    self.listaFatture.SetItemBackgroundColour(index, 'gray')
    self.listaFatture.SetItemTextColour(index, 'black')

事件被触发,但颜色没有改变

提前感谢所有试图帮助我的人

【问题讨论】:

  • 当项目为selected 时,颜色不会发生变化,因为这取决于您的操作系统。但是,如果您选择另一个项目,应该可以看到颜色已经改变。这是指的什么,如果是的话,你做的不多吗?
  • 我不知道我是否理解,但是如果我将颜色的变化放在 unselect 事件中,这可行...问题是我只想选择一行但颜色一次已更改我无法重置它,因此有 N 个选定行。我很抱歉我的英语,我希望你能理解我。无论如何都非常感谢
  • 在您的桌面或程序中选择一个“事物”,突出显示该“事物”。您当前的操作系统Theme 将定义选定项目的外观。您不能在程序中覆盖它。您可以为它编写代码,但它会被操作系统覆盖。

标签: python wxpython listctrl


【解决方案1】:

找到了解决办法,不知道是不是bug。

我用 -1 设置了一个变量,之后,当我选择一行时,我记得索引,我在设置颜色后取消选择它...

阅读代码更简单...

self.lastSelected = -1
....
self.listaFatture.Bind(wx.EVT_LIST_ITEM_SELECTED, self.SelezionaFatturaColore)
....
def SelezionaFatturaColore(self,event):
    print('Selezionato')
    index= event.GetIndex()
    if self.lastSelected > -1:
        if self.lastSelected % 2 == 0:
           self.listaFatture.SetItemBackgroundColour(self.lastSelected, wx.Colour(255,255,255,255))
        else:
            self.listaFatture.SetItemBackgroundColour(self.lastSelected, wx.Colour(152,245,255,255))

    self.listaFatture.SetItemState(index, 0, wx.LIST_STATE_SELECTED)

    self.listaFatture.SetItemBackgroundColour(index, wx.Colour(128,128,128,255))
    self.listaFatture.SetItemTextColour(index, wx.Colour(0,0,0,255))
    self.lastSelected = index

【讨论】:

  • 我觉得你可以使用wx.EVT_LIST_ITEM_DESELECTED来实现颜色变化。
猜你喜欢
  • 2017-06-19
  • 1970-01-01
  • 2021-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-06
  • 2014-02-05
  • 2014-03-07
相关资源
最近更新 更多