从wx.Choice中的列表更改特定值的颜色

时间:2017-10-10 15:51:35

标签: python wxpython

很抱歉让这个含糊不清但我正在编写一个python代码,其中列表中的值被附加到wx.Choice框。在这些值中有一些正确的和不正确的,我已经区分了哪些值是正确的,哪些不在我的代码中。我想通过将它们设置为红色来显示wx.Choice中的这些值是不正确的。我知道有SetForegroundColour这样的选项,但我没有找到在wx.Choice内完成此操作的充分方法,任何人都知道我该如何做到这一点?

谢谢!

2 个答案:

答案 0 :(得分:0)

正如您从评论中了解到的那样,您尝试做的事情似乎并不是一个简单的选择。但是,您可以使用combotreebox并将有效和无效选项放在树的2个不同分支中。

import wx
from wx.lib.combotreebox import ComboTreeBox
class Myframe(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None)
        pan = wx.Panel(self)
        valid_list = ["1111","22222","33333","44444"]
        invalid_list = ["5555","6666","77777","88888"]
        self.combo = ComboTreeBox(pan)

        Valid = self.combo.Append('Valid Choices') # Add a root item
        for i in valid_list:
            self.combo.Append(i, parent=Valid) # Add childen to Valid Choices

        InValid = self.combo.Append('InValid Choices') # Add a root item
        for i in invalid_list:
            self.combo.Append(i, parent=InValid) # Add childen to InValid Choices
        self.combo.SetSelection(Valid)

        self.combo.Bind(wx.EVT_COMBOBOX, self.OnCombo)

    def OnCombo(self, event):
        print (self.combo.GetStringSelection())

if __name__ == "__main__":
    App = wx.App()
    Myframe().Show()
    App.MainLoop()

enter image description here

答案 1 :(得分:0)

还有另一个选项,您可以根据自己的喜好找到更多选项,BitmapComboBox,这是一个组合框,在列表中的项目前显示位图。

import wx
from wx.adv import BitmapComboBox   # Phoenix
#import wx.combo                    # wxpython Classic
class Myframe(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None)
        pan = wx.Panel(self)
        valid_list = ["1111","22222","33333","44444"]
        invalid_list = ["5555","6666","77777","88888"]
        image = wx.Image("vvalid.png")
        valid_bmp = wx.BitmapFromImage(image)
        image = wx.Image("vinvalid.png")
        invalid_bmp = wx.BitmapFromImage(image)
        self.combo = BitmapComboBox(pan)           # Phoenix
        #self.combo = wx.combo.BitmapComboBox(pan)   #wxpython Classic
        for i in valid_list:
            self.combo.Append(i, bitmap=valid_bmp)
        for i in invalid_list:
            self.combo.Append(i, bitmap=invalid_bmp)
        self.combo.SetSelection(0)
        self.combo.Bind(wx.EVT_COMBOBOX, self.OnCombo)

    def OnCombo(self, event):
        print (self.combo.GetStringSelection())

if __name__ == "__main__":
    App = wx.App()
    Myframe().Show()
    App.MainLoop()

enter image description here

我已经包含了Phoenix和Classic wx的代码,虽然使用Phoenix,你应该用wx.BitmapFromImage取代wx.Bitmap,它现在可以让你使用旧表格。