Найти ближайшую предыдущую отметку в текстовом виджете Tkinter - PullRequest
0 голосов
/ 22 декабря 2018

У меня есть текстовый виджет с тремя строками текста.Я хочу знать, в какой области текста находится курсор вставки. Я установил метки с помощью метода mark_set() и попытался получить ближайшую предыдущую метку с помощью метода mark_previous(), но предыдущая метка в списке всегда "тк :: anchor1" .Есть ли способ получить ближайшую предыдущую определенную пользователем метку к курсору?

Вот иллюстративный пример.Когда я нажимаю кнопку, я хочу, чтобы она распечатала область 1, 2 или 3 в зависимости от положения курсора.

import tkinter as tk

class Main(tk.Tk):
    def __init__(self):
        tk.Tk.__init__(self)
        self.text = tk.Text()
        self.text.pack()
        self.strings = ["Region 1", "Region 2", "Region 3"]
        for text in self.strings:
            self.text.mark_set(text, "insert")
            self.text.mark_gravity(text, "left")
            self.text.insert("insert", "{}\n".format(text))
        for mark in self.strings:
            print(self.text.index(mark))
        self.button = tk.Button(text="Find Region", command=self.find_region)
        self.button.pack()

    def find_region(self):
        region = self.text.mark_previous("insert")
        print("You are in region {}".format(region))

if __name__ == '__main__':
    main = Main()
    main.mainloop()

Обновлено - Второй цикл for распечатывает индексы меток, как и ожидалось (1.0, 2.0, 3.0), но mark_previous не находит их.

1 Ответ

0 голосов
/ 22 декабря 2018

По какой-то причине использование метки «index» напрямую не работает.Но если я изменю строку на

region = self.text.mark_previous(self.text.index("insert"))

, она будет работать нормально и, как и ожидалось.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...