wxPython,更改StyledTextCtrl的背景颜色

时间:2012-06-02 21:26:01

标签: python wxpython wxwidgets

我试过(但没有任何反应)

    self.txt.SetBackgroundColour ((255,0,0))

如标题中所述,我正在尝试更改背景颜色StyledTextCtrl。有谁知道可以使用的方法?我已经检查了API文档,但我似乎无法找到一个,http://wxpython.org/docs/api/wx.stc.StyledTextCtrl-class.html

(按背景颜色,我的意思是整个书写区域,当然)

有谁知道我能这样做的方法吗?

编辑:

以下代码中的背景不会改变

import wx
import wx.stc

app = wx.App(redirect=True)
top = wx.Frame(None, title="StyledTXTCtrl", size=(300,200))
txt=wx.stc.StyledTextCtrl(top)
txt.SetBackgroundColour((255,255,0))
txt.Refresh()
top.Show()
app.MainLoop()

2 个答案:

答案 0 :(得分:3)

我的第一反应是调用txt.Refresh(),因为我在使用wx.TextCtrl方面有类似的经验,其中背景颜色没有更新,Refresh()调用强制重绘。但是,似乎这种做法不正确。

在审核StyledTextCtrl API后,似乎SetBackground()不是您想要的功能。我的理解是,因为STC可以在同一个框中有多个样式,所以各个文本样式优先于STC的设置。

经过一番研究后,我找到了StyleSetBackground()功能。这会修改默认样式,使背景为红色,有效地将背景设置为红色。你需要这样称呼它:

txt.StyleSetBackground(wx.stc.STC_STYLE_DEFAULT, (255,0,0))

请记住,如果您使用多种样式,则可能需要为每种样式调用此方法。

--- --- EDIT
我忘记通过输入一些文本来检查我的代码。事实证明,如果你所做的只是按照我的建议调用SyleSetBackground(),当你输入文字时,输入文字的背景仍然是白色,而不是预期的红色。

通过在设置背景颜色后调用以下代码,可以轻松修复此问题,我已经发现了这一点:

txt.StyleClearAll()

我的猜测是,当您创建StyledTextCtrl时,它会将文本样式设置为wx.stc.STC_STYLE_DEFAULT。到现在为止还挺好。但是,在此之后我们更改默认样式的值(通过使背景变为红色),所以现在文本样式和默认样式是不同的。因此,我们需要调用StyleClearAll()将所有样式重置为默认样式(现在具有红色背景)。

答案 1 :(得分:1)

这在我的电脑上运行得很好

self.txt.SetBackgroundColour((255,0,0))

你的操作系统是什么?