如何在wxpython中设置文本ctrl的样式?

时间:2016-02-25 09:05:30

标签: python wxpython

我有一个文本ctrl如下:

self.abc= wx.TextCtrl(self, -1, "", style=wx.TE_PROCESS_ENTER|wx.TE_MULTILINE)

我想要的是能够在创建后从文本ctrl中添加或删除样式。

类似的东西:

if x:
   make abc to style=wx.TE_PROCESS_ENTER|wx.TE_MULTILINE|TE_READONLY
else:
   make abc to style=wx.TE_PROCESS_ENTER|wx.TE_MULTILINE

我看到了函数SetStyle但是从我只读它的ADD样式来看,它并没有覆盖现有的样式。

我该怎么办?

1 个答案:

答案 0 :(得分:2)

根据文档,并非wx.TextCtrl的所有窗口样式都可以动态更改:wx.TextCtrl documentation on window styles的最后一段提及:

  

请注意,在wxMSW和wxGTK上创建控件后,可以动态更改对齐样式(TE_LEFT,TE_CENTRE和TE_RIGHT)。 TE_READONLY,TE_PASSWORD和包装样式可以在wxGTK下动态更改,但不能在wxMSW下动态更改。其他样式只能在控件创建期间设置。

话虽如此,在您的示例中,您似乎唯一感兴趣的是更改READONLY样式,如文档中所述,可以更改。

这样做的方法是调用TextCtrl&#39} SetEditable方法:

以下是一个示例,说明如何使用其他按钮切换标记:

import wx

class MyApp(wx.App):
    def __init__(self, redirect=False, filename=None):
        wx.App.__init__(self, redirect, filename)
        self.frame = wx.Frame(None, wx.ID_ANY, title='My Title')
        self.panel = wx.Panel(self.frame, wx.ID_ANY)
        b = wx.Button(self.panel, -1, "Toggle the read-only flag", (50,50))
        self.abc= wx.TextCtrl(self.panel, -1, "", (30, 70), size=(410,90), style=wx.TE_MULTILINE)

        self.Bind(wx.EVT_BUTTON, self.OnButton, b)
        self.cnt = 0
        self.frame.Show()

    def OnButton(self, evt):
        self.cnt += 1
        print(self.abc.IsEditable()) # for debugging
        self.abc.SetEditable((True, False)[self.cnt%2])

if __name__ == '__main__':
   app = MyApp()
   app.MainLoop()