当我将标签分配给 Gtk.TextView 时,为什么我的 Gtk 程序会显示文本

问题描述 投票:0回答:0

我正在尝试编写一个程序,该程序将从 Gtk.TextView 获取数据并为其分配标签。基本上是一个降价格式化程序。但是每当我为斜体添加一个 * * 集时,整个程序就会崩溃。

这是我的代码。这不是最好看的代码,因为我正在试验这个想法。

# Imports
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, Pango
class MarkdownFormatter:
    def __init__(self, textview):
        self.textview = textview
        self.text_buffer = self.textview.get_buffer()
        self.text_buffer.connect('insert-text', self.on_key_insert)
        self.tag_bold = self.text_buffer.create_tag('bold',weight=Pango.Weight.BOLD)
        self.tag_italic = self.text_buffer.create_tag('italic',style=Pango.Style.ITALIC, )
        self.tag_underline = self.text_buffer.create_tag('underline',underline=Pango.Underline.SINGLE)
        self.bold= False
        self.italic = False
        self.italic_start_iter = Gtk.TextIter()
        self.italic_end_iter = Gtk.TextIter()
        self.underline = False
        
    def on_key_insert(self, buffer, inter, text, iteg):
        end= self.text_buffer.get_end_iter()
        start= self.text_buffer.get_start_iter()
        all_text = self.text_buffer.get_text(end, start, True)
        self.text_buffer.remove_all_tags(start, end)
        count = 0
        self.italic =  False
        for d in all_text:
            count+= 1
            if '*' in d:
                if self.italic == False:
                    self.italic = True
                    self.italic_start_iter.set_offset(count)
                elif self.italic:
                    self.italic = False
                    self.italic_end_iter.set_offset(count)
                    self.text_buffer.apply_tag(self.tag_italic, self.italic_start_iter, self.italic_end_iter)
                  

text = '''
*I is good.*
she is smart.
"Hi" he said.

'''


if __name__ == '__main__':

    def quit(*args):
        Gtk.main_quit()

    window = Gtk.Window.new(Gtk.WindowType.TOPLEVEL)
    window.set_title('Markdown formatter')
    view = Gtk.TextView()
    view.get_buffer().set_text(text)

    formater = MarkdownFormatter(view)

    window.set_default_size(600, 400)
    window.add(view)
    window.show_all()
    window.connect('delete-event', quit)
    Gtk.main()

运行程序,然后当您尝试键入任何内容时它会崩溃(它只会在您键入时尝试格式化文本。

感谢您的帮助!

python gtk gtk3 pygobject
© www.soinside.com 2019 - 2024. All rights reserved.