0

我正在用 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. 
4

1 回答 1

1

我不确定您是否可以使用默认的 FontDialog 来禁用/启用某些字段。它按原样出现。但是,您可以选择将其预设为某个值和/或忽略某些值。

为此,您可以将data参数传递给对话框构造函数。您必须自己构造 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。同样在同一个博客上是另一个很好的例子。您还可以获得您需要的所有字体和/或其他参数的列表,并让您拥有Dialog.

更新

要从特定位置的文本中获取正确的数据,您需要使用GetStyleor 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查看可以从那里提取的内容。我认为下划线/粗体/斜体都在 Font 对象中:检查GetUnderlinedGetWeightGetStyle(以及它们各自的设置器。

始终检查文档,您会在不到一个小时内找到答案:)

于 2012-12-31T17:47:55.800 回答