gpt4 book ai didi

python - 无法在 Tkinter 中使用 "index"获得标记

转载 作者:行者123 更新时间:2023-11-30 22:00:16 25 4
gpt4 key购买 nike

任何人都可以回答为什么在命令下面的代码中 self.text.mark_previous(self.text.index("insert")) 有效并返回正确的标记,但是 self.text .mark_previous("insert") 返回 tk::anchor1 吗?只需单击文本中的某个区域并点击按钮即可。

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):
self.text.update_idletasks()
region = self.text.mark_previous("insert") # This doesn't work. It returns tk::anchor1
region2 = self.text.mark_previous(self.text.index("insert")) # This works
print("You are in region {} {}".format(region, region2))

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

最佳答案

因为在与 insert 相同的索引处有一个标记 tk::anchor#,但位于之前的位置。

最初或每当鼠标指针不在任何文本上时,当前插入标记位于同一索引处,并且按当前的顺序排列> 后跟插入

因此,如果您在程序开始时单击“查找区域”按钮,它将打印,

You are in region current Region 3

因为按顺序,当前标记位于插入标记的上一个位置(但索引相同),但Region 3标记位于将之前的“索引”添加到插入标记。

据我了解,当您第一次单击文本框时(我还不知道原因),tkinter 会添加一个额外的标记 tk::anchor# ,该标记位于相同的索引处作为 insert 但位于 insert 标记之前(如果鼠标指针不在文本上,则位于 current 之后)。

因此,当您根据标记名称而不是索引搜索前一个标记时,将返回同一索引上的前一个标记。您可以通过在同一索引处添加两个用户定义的标记来自行测试。

关于python - 无法在 Tkinter 中使用 "index"获得标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54340047/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com