2017-10-10 36 views
0

残念ですが、リストの値がwx.Choiceボックスに追加されているPythonコードを作成しています。これらの値の中には正しいものと正しくないものがありますが、私はどの値が正しいのか、どのものが私のコードにないのかを区別しました。これらの値が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.Bitmapwx.BitmapFromImageを置き換える必要があり、フェニックスとクラシックWXの両方のためのコードが含まれています。

+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シンプリシティはほとんど常に最適なオプションです –

関連する問題