2011-10-12 5 views
6

나는 여러 줄을 내가 그것을를 forground 그리고 strings.I을 작성하기위한 배경 색상이 다른 색상으로 다른 라인을 작성할 필요가 설정다른 전경 색상

wx.TextCtrl() 

객체를 가지고

wx.TextCtrl.setForgroundcolor() 

은 이전의 모든 선 색상도 변경합니다.이 방법이 있습니까?

답변

11

컬러 텍스트를 얻을 수 wx.Python 몇 가지 방법이 있습니다로 wx.ListCtrl의 색상을 설정할 수 있습니다. wx.TE_RICH

  • wx.TextCtrl, wx.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입니다.

당신은 SetItemBackgroundColourSetItemTextColour

+1

을 수행 할 수 있습니다

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

은 예입니다 . – joaquin

+0

귀하의 답변에 대한 +1 @ Joaquin; 나는 몰랐다. – Remi

5

당신은 기본 속성을 변경할 수 있습니다

#!/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