wxrichtextctrl字体对话框

时间:2012-12-31 17:20:44

标签: wxpython

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

1 个答案:

答案 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

<强>更新

要从特定位置的文字中获取正确的数据,您需要使用GetStyleGetStyleForRange,但使用的方法不对。如果您阅读了文档,您会注意到这些文档会返回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对象中:检查GetUnderlinedGetWeightGetStyle(及其各自的设置者。

总是检查文档,你会在不到一个小时内找到你的答案:)