Wxpython 如何将样式行的背景色扩展到wxWidget TextCtrl或StyledTextCtrl中的整行?

Wxpython 如何将样式行的背景色扩展到wxWidget TextCtrl或StyledTextCtrl中的整行?,wxpython,wxwidgets,Wxpython,Wxwidgets,使用TextCtrl(在wxPython中)我可以设置背景,但它不会延伸到整个行的长度(至少不会在GTK后端) 我的代码或多或少是这样做的: self.txt.SetBackgroundColor(wx.WHITE) self.txt.SetDefaultStyle(wx.TextAttr(wx.BLACK, col_green)) self.txt.AppendText("text1\n") self.txt.SetDefaultStyle(wx.TextAttr(wx.BLACK, co

使用TextCtrl(在wxPython中)我可以设置背景,但它不会延伸到整个行的长度(至少不会在GTK后端)

我的代码或多或少是这样做的:

self.txt.SetBackgroundColor(wx.WHITE)

self.txt.SetDefaultStyle(wx.TextAttr(wx.BLACK, col_green))
self.txt.AppendText("text1\n")

self.txt.SetDefaultStyle(wx.TextAttr(wx.BLACK, col_red))
self.txt.AppendText("text2\n")
我得到的是:

[styled text1][         ctrl bg ]
[another styled text2][ ctrl bg ]


我所期望的是:

[styled text1][         keep text1 bg ]
[another styled text2][ keep text2 bg ]

StyledTextCtrl似乎有一个更高级的API,可以在所有后端上实现这一点,但我不知道该怎么做。

SetDefaultStyle()
可能不受某些平台的支持


如果您不介意整个控件具有相同的背景,请选择
SetBackgroundColor()

StyledTextCtrl的工作方式与TextCtrl完全不同

  • 缓冲区中的文本具有样式
  • 样式是0-31之间的简单预定义数字。(单个窗口小部件中最多只能同时包含32种样式)
  • 默认情况下,添加的文本将获取样式0
  • 样式具有字体、背景/fg等属性。。。还有一个
    属性
  • 此属性控制样式是否应用于线条的其余部分(我需要的)
所以基本上是初始代码

self.txt.SetBackgroundColor(wx.WHITE)
self.txt.SetDefaultStyle(wx.textatt(wx.BLACK,col_green))
self.txt.AppendText(“text1\n”)
self.txt.SetDefaultStyle(wx.texttr(wx.BLACK,col_red))
self.txt.AppendText(“text2\n”)
使用StyledTextCtrl将变成:

#
#初始化样式
#
样式_text1=1
self.txt.StyleSetBackground(style\u text1,col\u red)
self.txt.StyleSetEOLFilled(style_text1,True)
样式_text2=2
self.txt.StyleSetBackground(style\u text2,col\u绿色)
self.txt.StyleSetEOLFilled(style_text2,True)
#
#附加样式文本的助手
#
def append_文本(自身、文本、样式=无):
start=self.txt.GetLength()
self.txt.AppendText(文本)
nb=self.txt.GetLength()-开始
如果样式:
self.txt.StartStyling(start,31)
self.txt.setTyling(注意,样式)
#因为我使用只读小部件只显示数据
#在附加时解锁小部件
self.txt.SetReadOnly(False)
self.txt.SetEditable(真)
附加文本(“文本1\n”,样式\u文本1)
附加文本(“文本2\n”,样式文本2)
#再锁上
self.txt.SetReadOnly(True)
self.txt.SetEditable(False)

恐怕
wxTextCtrl
只支持对其中的文本应用样式(包括背景),也就是说,它不会对空白区域设置样式。我看到的唯一可能的解决方案是在每一行中填充空格,直到达到最大线宽。当然,只有在使用固定宽度字体的情况下,这才有可能正常工作。

这正是我不想做的。只是一个想法,一个选项是使用单列
ListCtrl
并启用
EnableAlternateRowColours
,它会自动完成。如果您需要2种以上的颜色,您可以手动设置项目文本和背景颜色。这是一个简单的解决方案是的。一定要禁用自动换行,也可能根据需要禁用水平滚动。