我有一个文本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样式来看,它并没有覆盖现有的样式。
我该怎么办?
答案 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()