在Tkinter文本小部件中找到最接近的上一个标记

时间:2018-12-22 04:29:27

标签: python tkinter

我有一个文本小部件,带有三行文本。我想知道“插入”光标当前位于文本的哪个区域。我使用mark_set()方法设置了标记,并尝试使用mark_previous()方法获得了最接近的上一个标记,但是尝试了列表始终是“ tk :: 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 :(得分:0)

由于某种原因,直接使用“索引”标记似乎无效。但是,如果我将行更改为

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

它工作正常且符合预期。