如何在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
样式,如文档中所述,它可以更改。
方法是调用 TextCtrl
的 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()
我有一个文字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
样式,如文档中所述,它可以更改。
方法是调用 TextCtrl
的 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()