Мой Python GUI не помечает все ключевые слова правильно - PullRequest
0 голосов
/ 10 июня 2018

Я сделал Python GUI, который позволяет пользователю вводить вещи, как в блокноте.
Затем я добавил поток, который проверяет, найдено ли ключевое слово input, и помечает его СИНИМ.
Он пометилimport ключевое слово, но не полное слово ... только 't' в конце.
Поэтому я решил сделать вывод, который печатает все цветные ключевые слова, и его начало line.char (iof import) -> до конца line.char (t of import).
Выдает все, и с выводом все в порядке.Но маркировка все еще не работает.
У кого-то есть причина, почему это могло произойти ??

Мой код для создания виджета Текст и добавления тега:

def createWidgets(self):
    self.code = tkinter.Text(self)
    self.code.tag_configure("BLUE", foreground="blue")

мой код для потока:

def startT(self):
    for i in range(5):
        t = threading.Thread(target=self.markup)
        t.start()

мой код разметки:

def markup(self):
    while True:
        time.sleep(0.1)
        #print("Getting code..")
        currentline = 0
        for line in self.code.get("1.0","end").splitlines():
            currentline += 1
            content = line.split(" ")
            for word in content:
                if word == "import":
                    try:
                        self.code.tag_add("BLUE", getBegin(currentline, line, word), getEnd(currentline, line, word))
                        print("Set \""+word+"\" from "+getBegin(currentline, line, word)+" TO "+getEnd(currentline, line, word)+ " to BLUE!")
                    except tk.TclError:
                        pass
                else:
                    try:
                        self.code.tag_add("BLACK", getBegin(currentline, line, word), getEnd(currentline, line, word))
                        print("Set \""+word+"\" from "+getBegin(currentline, line, word)+" TO "+getEnd(currentline,line,word)+" to BLACK!")
                    except tk.TclError:
                        pass

и в конце мои коды для получения позиции:

def getBeginEnd(line, word):
    buffer = 0
    for inline in line.split(" "):
        if inline != word:
             buffer += len(inline)+1
        else:
            return str(buffer)

def getBegin(currentline, line, word):
    return str(currentline)+"."+getBeginEnd(line,word)

def getEnd(currentline, line, word):
    return str(currentline)+"."+str(int(getBeginEnd(line,word))+len(word))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...