我正在用 wxrichtextctrl 开发一个小应用程序。我的字体功能异常。下面是字体功能。
def OnFont(self,event):
if not self.display.HasSelection():
return
r = self.display.GetSelectionRange()
fontData = wx.FontData()
fontData.EnableEffects(False)
attr = wx.richtext.RichTextAttr()
attr.SetFlags(wx.TEXT_ATTR_FONT)
dlg = wx.FontDialog(self, fontData)
if dlg.ShowModal() == wx.ID_OK:
fontData = dlg.GetFontData()
font = fontData.GetChosenFont()
color=fontData.GetChosenColor()
if font:
attr.SetFlags(wx.TEXT_ATTR_FONT)
attr.SetFont(font)
self.display.SetStyle(r, attr)
dlg.Destroy()
这样做的问题是,如果所选文本带有下划线并且设置了某些字体,则下划线会被删除。对话框有没有办法只修改选择的当前字体而不是更改文本粗细、下划线、斜体。或者这可能与richtextformatting 对话框。或者是否可以修改字体对话框以仅显示选择字体和大小选项并修改所选文本。有人可以指出一个好的示例文档。
更新:我可以为对话框设置预定义的字体,但问题是获取所选文本的字体值。我正在尝试获取选择中第一个字符的样式,并将其设置为字体对话框,包括下划线、字体、粗体、斜体和大小。下面是我想做的代码。
attr = wx.richtext.RichTextAttr()
attr.SetFlags(wx.TEXT_ATTR_FONT)
fontofselection=self.richtextctrl.GetStyle(1,attr)#this works without errors
fontData.SetInitialFont(fontofselection)#this generates above mentioned error. probably because getstyle is not getting font object type. Is there another method to get font of a character at particular position.