2017-10-10 135 views
0

對不起,使這個模糊,但我正在寫一個Python代碼,其中列表中的值被附加到一個wx.Choice框。在這些值中有一些正確的和不正確的,我已經區分了哪些值是正確的,哪些不在我的代碼中。我想在wx.Choice中顯示這​​些值不正確,因爲它們是紅色的。我知道有這樣的選項,如SetForegroundColour,但是我還沒有找到一個合適的方法在wx.Choice之內完成此任務,任何人都有任何想法我可以做到這一點?在wx.Choice中更改列表中特定值的顏色

謝謝!

+0

我相信不可能在wx.Choice中訪問單個項目的屬性。 – prgDevelop

+0

我認爲你是在小部件本身的膽量下降。一旦做出選擇,你總是可以選擇顏色,雖然這可能不是你以前的樣子。這確實會問這個問題,如果它們無效,爲什麼會包含錯誤的選擇? –

回答

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

我已經包含了兩個菲尼克斯和經典WX代碼,雖然使用鳳凰,你應該只wx.Bitmap取代wx.BitmapFromImage,但它目前讓你擺脫舊的形式。

+0

這是一個非常好的解決方案!我不知道你可以在組合框中使用位圖!謝謝! – steradian

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

+0

感謝您選擇這個備選方案。回答你爲什麼要提出無效值的問題。這是因爲在這種情況下,「無效」值意味着它們不等於列表中的其他值。但在某些情況下,不相等的值實際上可能是正確的值,所以我想將值保留在列表中,但表示它與其他值不同。 – steradian

+1

我不確定這是否是放置此評論的適當位置,但我已決定通過在「無效」項旁邊放置星號來表示差異,謝謝! – steradian

+0

@steradian簡單幾乎總是最好的選擇 –