2

只是一个关于 wx.TextCtrl 元素的简单问题。我在应用程序上有这个文本字段,用户可以在其中添加一个字符串。我想要一个带有红色文本的文本字段。所以我生成了这段代码:

self.hRepositoryTextfield = wx.TextCtrl(self.hPanel)
self.hRepositoryTextfield.SetDefaultStyle(wx.TextAttr(wx.RED))

如果用户在此文本字段上复制一些带有应用字体的字符串(例如黑色字符串或具有特定字体的字符串),则红色,无论如何默认样式都不会受到尊重。我希望我为我的 wx.TextCtrl 决定的样式总是根据我的设置强制执行。我能怎么做?

先感谢您

4

3 回答 3

1

SetForegroundColor 可能在一个操作系统上工作,而不是在另一个操作系统上工作。这取决于本机小部件。我会将 TextCtrl 的样式标志设置为 wx.TE_RICH。查看 wxPython 演示以获取示例。您甚至可以使用 HTMLCtrl 的 StyledTextCtrl 或 FancyText。

于 2012-12-13T16:55:35.907 回答
0
self.hRepositoryTextfield.SetForegroundColor(wx.RED)

那应该工作....

于 2012-12-13T16:45:15.387 回答
0

我以这种方式解决了这个问题:

在代码的第一部分中,它定义了我的文本字段样式...

self.hRepositoryTextfield.SetStyle(0, len(self.hRepositoryTextfield.GetValue()), wx.TextAttr(wx.RED))
self.hRepositoryTextfield.SetFont(self.hFontLabel)
self.hRepositoryTextfield.Bind(wx.EVT_TEXT, self.forceDefaultStyle)

...然后我将每个文本更改绑定到我的强制样式函数:

def forceDefaultStyle(self, event):
    hEventObject = event.GetEventObject()
    hEventObject.SetStyle(0, len(self.hRepositoryTextfield.GetValue()), wx.TextAttr(wx.RED))
    hEventObject.SetFont(self.hFontLabel)

它有效!

于 2012-12-19T23:56:52.357 回答