对不起,使这个模糊,但我正在写一个Python代码,其中列表中的值被附加到一个wx.Choice
框。在这些值中有一些正确的和不正确的,我已经区分了哪些值是正确的,哪些不在我的代码中。我想在wx.Choice
中显示这些值不正确,因为它们是红色的。我知道有这样的选项,如SetForegroundColour
,但是我还没有找到一个合适的方法在wx.Choice
之内完成此任务,任何人都有任何想法我可以做到这一点?在wx.Choice中更改列表中特定值的颜色
谢谢!
对不起,使这个模糊,但我正在写一个Python代码,其中列表中的值被附加到一个wx.Choice
框。在这些值中有一些正确的和不正确的,我已经区分了哪些值是正确的,哪些不在我的代码中。我想在wx.Choice
中显示这些值不正确,因为它们是红色的。我知道有这样的选项,如SetForegroundColour
,但是我还没有找到一个合适的方法在wx.Choice
之内完成此任务,任何人都有任何想法我可以做到这一点?在wx.Choice中更改列表中特定值的颜色
谢谢!
还有另一种选择,你可能发现更多的根据自己的喜好,一个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()
我已经包含了两个菲尼克斯和经典WX代码,虽然使用凤凰,你应该只wx.Bitmap
取代wx.BitmapFromImage
,但它目前让你摆脱旧的形式。
这是一个非常好的解决方案!我不知道你可以在组合框中使用位图!谢谢! – steradian
正如您从评论中知道的那样,您尝试做的事似乎并不是一个简单的选择。但是,您可以使用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()
我相信不可能在wx.Choice中访问单个项目的属性。 – prgDevelop
我认为你是在小部件本身的胆量下降。一旦做出选择,你总是可以选择颜色,虽然这可能不是你以前的样子。这确实会问这个问题,如果它们无效,为什么会包含错误的选择? –