我正在使用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对话框实现。或者是否可以修改fontdialog以仅显示选择的字体和大小选项并修改所选文本。有人可以指出一个很好的样本文档。
更新: 我能够为对话框设置预定义的字体,但问题是获取所选文本的字体值。我想要的是获取选择中第一个字符的样式,并将其设置为字体对话框,包括下划线,字体,粗体,斜体和大小。 下面是我想做的代码。
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.
答案 0 :(得分:1)
我不确定您是否可以使用默认的FontDialog来禁用/启用某些字段。它按原样出现。但是,您可以选择将其预设为某个值和/或忽略某些值。
为此,您可以将data
参数传递给dialog constructor。您必须自己构造FontData对象并将其传递给对话框。这段示例代码取自Mouse vs. Python博客:
data = wx.FontData()
data.EnableEffects(True)
data.SetColour(self.curClr) # set colour
data.SetInitialFont(self.curFont)
dlg = wx.FontDialog(self, data)
查看文章以获取更完整的示例。另请查看FontData对象的文档,了解如何构造它并对其进行操作。
或者,您可以使用较少用户友好的对话框(IMO)FontEnumerator。同一博客上还有另一个great example。您还可以获取所需的所有字体和/或其他参数的列表,并使您拥有Dialog
。
<强>更新强>
要从特定位置的文字中获取正确的数据,您需要使用GetStyle
或GetStyleForRange
,但使用的方法不对。如果您阅读了文档,您会注意到这些文档会返回True
表示成功,或False
表示失败,并且您应该使用attr
来获取结果。例如:
attr = wx.richtext.RichTextAttr()
attr.SetFlags(wx.TEXT_ATTR_FONT)
success=self.richtextctrl.GetStyle(1,attr)
fontData.SetInitialFont(attr.GetFont()) # And extract any other information from there
请注意,这未经过测试,但应按预期工作。
请检查RichTextAttr
的{{3}},了解您可以从中提取的内容。我认为下划线/粗体/斜体都在Font对象中:检查GetUnderlined
,GetWeight
和GetStyle
(及其各自的设置者。
总是检查文档,你会在不到一个小时内找到你的答案:)