鱼C论坛

 找回密码
 立即注册
查看: 83|回复: 6

[技术交流] text.tag_add使用的问题

[复制链接]
发表于 2025-2-4 20:46:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
from tkinter import *
import webbrowser

root = Tk()

text = Text(root, width=30, height=5)
text.pack()

text.insert(INSERT, "I love FishC.com!")

text.tag_add("link", "1.7", "1.16")
text.tag_config("link", foreground="blue", underline=True)

运行上述代码, 执行text.tag_add("link", "1.7", "1.16"), 设置从第一行第8列, 到第一行第17列, 标记上下划线。 第一行第17列选的应该是感叹号‘!’。  为什么第一行第17列是字母‘m’呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2025-2-4 20:46:08 | 显示全部楼层
这是因为在 `tkinter` 的 `Text` 小工具中,索引是从 0 开始的。因此,在 `text.tag_add("link", "1.7", "1.16")` 中:

- `"1.7"` 表示第一行第 8 列(索引从 0 开始)。
- `"1.16"` 表示第一行第 17 列。

由于索引从 0 开始,第 16 列实际上是从第一个字符开始计算的第 17 个字符。因此,你的设置是从 "I love FishC.com!" 中的 "F" 到 "m"。

如果你想包括感叹号,那么你需要将第二个参数改为 `"1.17"`。如下所示:
from tkinter import *
import webbrowser

root = Tk()

text = Text(root, width=30, height=5)
text.pack()

text.insert(INSERT, "I love FishC.com!")

text.tag_add("link", "1.7", "1.17")
text.tag_config("link", foreground="blue", underline=True)

root.mainloop()

这样就会正确包含感叹号。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-2-4 20:50:21 | 显示全部楼层
FishC 发表于 2025-2-4 20:46
这是因为在 `tkinter` 的 `Text` 小工具中,索引是从 0 开始的。因此,在 `text.tag_add("link", "1.7", "1 ...

"I love FishC.com!" 里面的大写字母和“.”占用几个字符?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-2-4 20:50:27 | 显示全部楼层
鬼少 发表于 2025-02-04 20:50
FishC 发表于 2025-2-4 20:46
这是因为在 `tkinter`  ...


在字符串 "I love FishC.com!" 中,每个字符都占用一个字符的位置。具体地:

- "I"(大写字母)占用 1 个字符。
- "."(句号)占用 1 个字符。

因此,整个字符串 "I love FishC.com!" 共包含 17 个字符。

为了更好地理解,可以查看下面的代码,它将每个字符及其索引打印出来:
text = "I love FishC.com!"
for index, char in enumerate(text):
    print(f"Index: {index}, Character: '{char}'")

这样可以直观地看到每个字符的位置和索引。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-2-4 20:58:33 | 显示全部楼层
FishC 发表于 2025-2-4 20:50
在字符串 "I love FishC.com!" 中,每个字符都占用一个字符的位置。具体地:

- "I"(大写字母)占用 ...

描述下tag_add()方法各个参数的详细用法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-2-4 20:58:43 | 显示全部楼层
鬼少 发表于 2025-02-04 20:58
FishC 发表于 2025-2-4 20:50
在字符串 "I love Fish ...


`tag_add()` 方法用于在 `Text` 小工具中添加标签。它的语法如下:
text.tag_add(tagName, startIndex, endIndex=None)

下面是各个参数的详细说明:

1. **tagName**:
   - 标签的名称,用于标识和区分不同的标签。你可以使用这个名称来配置、删除或操作该标签。
   
2. **startIndex**:
   - 标签的起始位置索引,表示从哪里开始应用该标签。索引格式一般为 `"line.column"`,例如 `"1.0"` 表示第一行的第一个字符,`"2.5"` 表示第二行的第六个字符(索引从0开始)。
   
3. **endIndex** (可选):
   - 标签的结束位置索引,表示标签应用到哪里。如果不提供 `endIndex` 参数,标签将只应用于 `startIndex` 所指向的位置。格式与 `startIndex` 一样,例如 `"1.12"` 表示第一行的第13个字符(包含)。
   
下面是一个例子,展示了如何使用 `tag_add()` 方法:
from tkinter import *

root = Tk()

text = Text(root, width=30, height=5)
text.pack()

text.insert(INSERT, "I love FishC.com!")

# 添加标签 "link" 从第一行第8列到第一行第17列(不包含第17列)
text.tag_add("link", "1.7", "1.16")

# 配置标签 "link" 的样式
text.tag_config("link", foreground="blue", underline=True)

root.mainloop()

在这个例子中,标签 "link" 被添加到了文本 "FishC.com" 上,并配置成蓝色并带下划线。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-2-5 10:15:57 | 显示全部楼层
若想选中到感叹号‘!’(索引1.16),应将结束索引设为下一个位置(即1.17):
text.tag_add("link", "1.7", "1.17")
检查每个索引对应的字符:
for i in range(17):  # 遍历索引0到16
    char = text.get("1.{}".format(i))
    print(f"Index 1.{i}: {char}")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-2-24 01:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表