Как получить конечную позицию подстроки в многострочном текстовом виджете - PullRequest
0 голосов
/ 23 октября 2018

У меня есть текстовый виджет с текстом внутри, он имеет символ '\n'.Текст разделен строками.Я попытался использовать метод поиска, чтобы найти начальную позицию подстроки в текстовом виджете.Тогда у меня есть позиция, как (2, 10).После этого я вычислил длину (18) подстроки и выяснил конечную позицию, добавив длину к начальной позиции, и получил что-то вроде этого 2.28.Но когда внутри подстроки есть символ '\n', это будет неправильная позиция.Например, если символ '\n' находится в положении 2.15, конец подстроки в виджете должен быть 3.13.Есть ли способ найти конечную позицию в многострочном текстовом виджете?Могу ли я использовать метод поиска для этого?Как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 23 октября 2018

Если у вас есть индекс, который вы хотите найти новый индекс, который находится на расстоянии N символов, вы можете использовать метод index вместе с расширенным синтаксисом текстового виджета (например: "line.character + n chars")

Вот рабочий пример:

import tkinter as tk

root = tk.Tk()
text = tk.Text(root)

text.insert("end", "line one\nthis is line two\nand this is the third line")

index = "2.10"
new_index = text.index("{} + {} chars".format(index, 18))
assert(new_index=="3.11")
0 голосов
/ 23 октября 2018

Вот один из способов подсчитать каждую строку.Этот метод будет подсчитывать каждую строку индивидуально, а общее количество будет меньше \n.

. Функция ниже проверит каждую строку и посчитает ее.Печать результатов для этой строки, а затем добавление этих результатов в счетчик.Наконец, когда цикл завершен, он напечатает общее количество.Я также добавил оператор печати, который даст индекс последнего символа для каждой строки в текстовом поле.

import tkinter as tk


root = tk.Tk()
root.geometry("250x100")
txt = tk.Text(root, height=4, width=30)
txt.pack()


def string_count():
    global txt
    counter = 0
    for ndex, line in enumerate(txt.get(1.0, "end-1c").splitlines()):
        counter += len(line)
        print("Count on Line {} is: {}".format(ndex + 1, len(line)))
        print("The index for the last character in this line is {}.{}".format(ndex + 1, len(line)))
    print("String count in text box is: {}".format(counter))

tk.Button(root, text="Get string count", command=string_count).pack()
root.mainloop()

Результаты:

enter image description here

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