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