2011-10-12 15 views
6

私は行ごとに異なる前景色は

wx.TextCtrl.setForgroundcolor() 
、私はstrings.Iを書くためにそれがforgroundだ設定と背景色複数行

wx.TextCtrl() 

オブジェクトが異なる色で異なる行を記述する必要があります持っています

は、すべての前の線の色も変更します。これには方法がありますか?

答えて

11

色付きのテキストを取得するwx.Pythonにはいくつかの方法がありますとwx.ListCtrlの色を設定することができます。あなたはそれらのすべての例を得ることができますwx.TE_RICH

  • wx.TextCtrlwx.TE_RICH2スタイル
  • wx.stc.StyledTextCtrl
  • wx.richtext.RichTextCtrl
  • wx.HtmlWindow(テキストのカラータグを挿入する)
  • wx.ListCrtl

〜で

たとえば、あなたがwx.TextCrtlのどの部分で前部と背景色を変更することができ、電子wxPythonをデモ:

rtc = wx.richtext.RichTextCtrl(self, style=wx.VSCROLL|wx.HSCROLL|wx.NO_BORDER) 
rtc.BeginTextColour((255, 0, 0)) 
rtc.WriteText("this color is red") 
rtc.EndTextColour() 
rtc.Newline() 

rt = wx.TextCtrl(self, -1,"My Text....",size=(200, 100),style=wx.TE_MULTILINE|wx.TE_RICH2) 
rt.SetInsertionPoint(0) 
rt.SetStyle(2, 5, wx.TextAttr("red", "blue")) 

wx.richtextは異なる色でラインを書くために使用することも簡単です。

他の回答に示されているように、wx.ListCrtlの使用は、(複数行のテキストの代わりに)テキストの行を扱う場合、非常に厳しい方法となります。

0

wx.TextCtrlの代わりに、wx.ListCtrlがあり、これは1行単位のインターフェイスを備えています。

あなたは SetItemBackgroundColourSetItemTextColour

+1

実際にあなたがすることができます。 – joaquin

+0

+1あなたの答え@ジョーキン;知りませんでした... – Remi

5

あなたが基本的なプロパティを変更することができます挿入する前に、ラインのセットの色が必要な場合:ここで

ctrlText.SetDefaultStyle(wx.TextAttr(wx.GREEN,wx.BLACK)) 
#where wx.GREEN - foreground, wx.BLACK - background for text 
ctrlText.SetBackgroundColour(wx.BLACK) 

は一例です:

#!/usr/bin/python 
# -*- coding: utf-8 -*- 
import wx 

class ColorTextForm(wx.Frame): 

    def __init__(self): 
     wx.Frame.__init__(self, None, wx.ID_ANY, "Colored text") 

     panel = wx.Panel(self, wx.ID_ANY) 
     self.log = wx.TextCtrl(panel, wx.ID_ANY, size=(100,100), 
          style = wx.TE_MULTILINE|wx.TE_READONLY|wx.HSCROLL|wx.TE_RICH) 

     self.log.SetDefaultStyle(wx.TextAttr(wx.GREEN, wx.BLACK)) 
     #self.log.SetBackgroundColour(wx.BLACK) 
     self.bgColor = wx.WHITE 
     self.log.SetBackgroundColour(self.bgColor) 

     btnRed = wx.Button(panel, wx.ID_ANY, 'Red') 
     btnGreen = wx.Button(panel, wx.ID_ANY, 'Green') 
     self.cbBG = wx.CheckBox(panel, label='White') 
     self.Bind(wx.EVT_BUTTON, self.onButtonRed, btnRed) 
     self.Bind(wx.EVT_BUTTON, self.onButtonGreen, btnGreen) 
     self.Bind(wx.EVT_CHECKBOX, self.onCheckChangeBG, self.cbBG) 

     sizer = wx.BoxSizer(wx.VERTICAL) 
     sizer.Add(self.log, 1, wx.ALL|wx.EXPAND, 5) 
     sizer.Add(btnRed, 0, wx.ALL|wx.CENTER, 5) 
     sizer.Add(btnGreen, 0, wx.ALL|wx.CENTER, 5) 
     sizer.Add(self.cbBG, 0, wx.ALL|wx.CENTER, 5) 
     panel.SetSizer(sizer) 

    def onButtonGreen(self, event): 
     self.log.SetDefaultStyle(wx.TextAttr(wx.GREEN, self.bgColor)) 
     self.log.AppendText("Geen\n") 

    def onButtonRed(self, event): 
     self.log.SetDefaultStyle(wx.TextAttr(wx.RED,self.bgColor)) 
     self.log.AppendText("Red\n") 

    def onCheckChangeBG(self, e): 
     sender = e.GetEventObject() 
     isChecked = sender.GetValue() 
     if isChecked: 
      self.bgColor = wx.BLACK 
      self.cbBG.SetLabel('Black') 
     else: 
      self.bgColor = wx.WHITE 
      self.cbBG.SetLabel('White') 

if __name__ == "__main__": 
    app = wx.PySimpleApp() 
    frame = ColorTextForm().Show() 
    app.MainLoop() 

結果:

enter image description here

関連する問題