0

一个简单的例子:

t.py

import wx
class MyFrame(wx.Frame):
    def __init__(self,parent):
        wx.Frame.__init__(self,parent,-1,title="my Frame",pos=(100,100),size=(300,400))
        panel=wx.Panel(self,-1)
        Text=wx.TextCtrl(panel,-1,"abc",size=(50,40),style=wx.TE_RICH2|wx.TE_MULTILINE)
        Text.SetDefaultStyle(wx.TextAttr("red"))

if __name__=='__main__':
    app=wx.App()
    frame=MyFrame(None)
    frame.Show()
    app.MainLoop()

系统:ubuntu 12.04。我添加了 wx.TE_RICH2,为什么 wx.TextCtrl.SetDefaultStyle 不起作用?谢谢

4

1 回答 1

0

问题是当使用 SetDefaultStyle 方法时,它要求 wx.TextCtrl 对象在调用它之前没有插入任何文本。例如,删除 wx.TextCtrl 声明中的“abc”,然后运行您的应用程序,它应该可以工作。前任:

import wx
class MyFrame(wx.Frame):
    def __init__(self,parent):
        wx.Frame.__init__(self,parent,-1,title="my Frame",pos=(100,100),size=(300,400))
        panel=wx.Panel(self,-1)
        # Notice no "abc" parameter
        Text=wx.TextCtrl(panel,-1,size=(50,40),style=wx.TE_RICH2|wx.TE_MULTILINE)
        Text.SetDefaultStyle(wx.TextAttr("red"))

if __name__=='__main__':
    app=wx.App()
    frame=MyFrame(None)
    frame.Show()
    app.MainLoop()

代码现在应该可以工作了。如果 TextCtrl 对象中已包含文本,则还可以使用 SetStyle() 方法,但如文档 ( http://docs.wxwidgets.org/trunk/classwx_text_ctrl.html )所述,此方法效率较低

于 2014-01-21T03:26:38.367 回答