Hallo,
ich versuche gerdade eine Art Editor zu basteln, scheitere aber daran einem bestimmten Textbereich eine Schriftart zuzuweisen.
http://paste.pocoo.org/show/96575/
Das ist mein derzeitiges Skript - in EditorToolBar.handle_font ist das Problem. Wie kann ich das lösen? Eine ähnliche Funktion wie ApplyUnderlineToSelection() gibt es ja für Font nicht.
Dann wollte ich noch fragen, wie man das am schlauesten mit den IDs und Konstanten löst. Momentan habe ich die IDs (BOLD, ITALOC etc.) ja in der Klasse definiert und SIZER_BORDER auch. Soll ich diese besser global definieren oder wie macht ihr das?
Danke!
MfG
RichTextCtrl
Moin, ich habs selber noch nicht versucht was du vorhast. Aber hast du schon mal einen Blick in die wx demos geworfen? Die demo 'RichTextCtrl.py' macht genau das was du dir bauen willst. Da müsstest du eigentlich fündig werden.
Super, danke! Eigentlich hatte ich da als erstes gesucht - aber nichts gefunden...
Das Problem hier bei ist, dass ich immer die alte Formatierung verliere (bold, italic...) - wie kann ich die alten Text-Eigenschaften beibehalten und nur die Schriftart ändern? (ich habe es schon mit der auskommentierten Zeile probiert) Ich überschreibe es ja immer mit dem Font-Objekt, da müsste man irgendwie die alten Werte wieder übernehmen...
Problem gelöst:
Code: Alles auswählen
def handle_font(self, event):
if not self.editor.HasSelection():
return
selection = self.editor.GetSelectionRange()
font = wx.Font(10, wx.SWISS, wx.NORMAL, wx.NORMAL, False,
u'Comic Sans MS')
attr = wx.richtext.TextAttrEx()
#self.editor.GetStyleForRange(selection, attr)
attr.SetFlags(wx.richtext.TEXT_ATTR_FONT)
attr.SetFont(font)
self.editor.SetStyle(selection, attr)
Problem gelöst:
Code: Alles auswählen
def handle_font(self, event):
if not self.editor.HasSelection():
return
selection = self.editor.GetSelectionRange()
attr = wx.richtext.TextAttrEx()
self.editor.GetStyleForRange(selection, attr)
attr.SetFontFaceName(u'Comic Sans MS')
self.editor.SetStyle(selection, attr)
Jetzt habe ich ein komisches Problem:
Man sollte ja annehmen, dass die Schriftart nur für "SelectionRange" geändert wird - leider wird relativ willkürlich die Schriftart geändert. Woran kann das liegen?
Code: Alles auswählen
class FontChoice(wx.ComboBox):
def __init__(self, parent, editor):
f = wx.FontEnumerator()
f.EnumerateFacenames()
font_list = f.GetFacenames()
wx.ComboBox.__init__(self, parent, -1, size=(120,-1), choices=font_list,
style=wx.CB_DROPDOWN|wx.CB_SORT)
self.editor = editor
self.Bind(wx.EVT_COMBOBOX, self.handle_font)
def handle_font(self, event):
selection_range = self.editor.GetSelectionRange()
print selection_range
attr = wx.richtext.TextAttrEx()
self.editor.GetStyleForRange(selection_range, attr)
font_choice = self.GetStringSelection()
attr.SetFontFaceName(font_choice)
if self.editor.HasSelection():
self.editor.SetStyle(selection_range, attr)