我正在用wxrichtextctrl開發一個小應用程序。我的字體功能出乎意料地行事。以下是字體功能。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.
我需要一點幫助。我嘗試使用font = self.display.GetStyle(1,attr)獲取位置爲1的文本的字體,其中attr和display在我的問題中定義在上面。但是,當我使用數據設置保存在getstyle中的字體時。setinitialfont(font),它表示wxfontconstant類型的預期參數。我的問題是我需要將選擇的字體設置爲字體對話框,包括在上面的下劃線和顏色 – MYNE
上它說預期的參數兩種類型wxfontconstant。有沒有更好的方式獲取字體,包括選擇下劃線,以及上述解決方案如何在字體對話框中勾選下劃線。 – MYNE
有一種名爲[wx.Font.SetUnderlined]的方法(http://wxpython.org/docs/api/wx.Font-class.html#SetUnderlined)。通常情況下,如果你從控制中獲得它,它應該已經被設置,我猜。另外,我找不到有關'wxFontConstant'的任何文檔。你可以用你的新代碼編輯你的問題嗎?只是一個簡單的例子,所以我可以看到你正在得到什麼.. – jadkik94