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

how to set style of text ctrl in 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 但是从我读到的内容来看它只是添加样式,它不会覆盖现有样式。

我能做什么?

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

Note that alignment styles (TE_LEFT, TE_CENTRE and TE_RIGHT) can be changed dynamically after control creation on wxMSW and wxGTK. TE_READONLY, TE_PASSWORD and wrapping styles can be dynamically changed under wxGTK but not wxMSW. The other styles can be only set during control creation.

也就是说,在您的示例中,您似乎唯一有兴趣更改的是 READONLY 样式,如文档中所述,它可以更改。

方法是调用 TextCtrlSetEditable 方法:

下面的示例显示了如何使用另一个按钮切换标志:

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()