在文本小部件中标记 - tkinter
Tagging in a text widget - tkinter
我在理解如何让标签在我的特定应用程序上工作时遇到一些问题,我有一个名为 'dwgoutputbox' 的文本小部件,它在读取 CSV 文件后显示多个字段
在此实例中,dwgoutputbox
文本小部件显示多个字符串变量 descDwg1,descDwg2,descDwg3
,它们是第一列中的项目,后跟 'issue' 数字,它们是其他变量
我试图让第一列中的项目突出显示,以便最终我可以使它们可点击,因为它们将 link 到文件。
由于第一列中的项目会发生变化,具体取决于 CSV 搜索(但仍采用以下通用格式)我不确定如何让 tag_config 起作用
self.outputQty.insert(INSERT,descQty)
self.outputDesc.insert(INSERT,descPN, END," ", END, descInfo)
self.dwgoutputbox.insert(INSERT, descDwg1, END, " ", END, " Issue: ",END,descIss1,END, "\n")
self.dwgoutputbox.insert(INSERT, descDwg2, END, " ", END, " Issue: ",END,descIss2,END, "\n")
self.dwgoutputbox.insert(INSERT, descDwg3, END, " ", END, " Issue: ",END,descIss3,END, "\n")
format_link()
def format_link(dwgoutputbox,tag,apply_tag):
self.dwgoutputbox.tag_config(tagName="19",foreground="blue",underline=1)
dwgoutputbox.tag_bind(tag,"<Button-1>",apply_tag)
好的,设法让它按预期工作,这主要归功于 Bryan Oakley 的帮助和耐心 - 非常感谢。
self.dwgoutputbox = Text(root, borderwidth=0, width=50, height=15, foreground="#ffffff",background="#3F3F3F", font="system_font 10")
self.dwgoutputbox.grid(row=3, column=2, columnspan=5, padx=2, pady=3)
self.dwgoutputbox.tag_config("dwg",foreground="lightblue")
self.dwgoutputbox.insert(1.0, descDwg3, "dwg", " Issue: ", "", descIss3, "", "\n")
self.dwgoutputbox.insert(1.0, descDwg2, "dwg", " Issue: ", "", descIss2, "", "\n")
self.dwgoutputbox.insert(1.0, descDwg1, "dwg", " Issue: ", "", descIss1, "", "\n")
我的一半问题是似乎没有很多/任何好的 'basic' 解释更高级的东西,这给玩了一个月 python 的新手一个很好的挑战。不过很享受:)
上面的结果现在给了我
您的代码中至少有两个问题。
首先,您错误地使用了 insert 语句。这是您的代码:
self.outputDesc.insert(INSERT,descPN, END," ", END, descInfo)
insert
命令必须将索引作为第一个参数,然后将文本作为下一个参数。之后的任何参数交替作为标签和文本。在你的例子中,文本是 descPN
的值,然后是一个名为 "end" 的标签(END
常量的值),一个 space,"end"m,然后是文字descInfo
.
其次,您从未配置标签 "end"。但是,您确实配置了一个名为 19
的标签,但您并未将该标签应用于任何文本。您需要将标记与 insert
语句一起使用,或者与 tag_add
语句一起使用。
要使用标签突出显示文本小部件中的文本,您需要做两件事:必须将标签配置为具有您想要的任何属性(颜色、字体等),并且必须将该标签添加到文本范围。
您可以使用 tag_configure
配置标签。例如,要有一个名为 "red" 的标签为文本提供红色背景,您可以这样做:
text_widget.tag_configure("red", background="red")
接下来,您需要将该标签应用于一段文本。有两种方法可以做到这一点。首先,您可以在插入文本时将标签应用于文本,方法是将标签作为参数包含在 insert
命令中:
text_widget.insert('end", "this text is red", "red")
第二种方法是将标签应用于范围。例如,要使第二行变为红色,您可以这样做:
text_widget.tag_add("red", "2.0", "2.0 lineend")
我在理解如何让标签在我的特定应用程序上工作时遇到一些问题,我有一个名为 'dwgoutputbox' 的文本小部件,它在读取 CSV 文件后显示多个字段
在此实例中,dwgoutputbox
文本小部件显示多个字符串变量 descDwg1,descDwg2,descDwg3
,它们是第一列中的项目,后跟 'issue' 数字,它们是其他变量
我试图让第一列中的项目突出显示,以便最终我可以使它们可点击,因为它们将 link 到文件。
由于第一列中的项目会发生变化,具体取决于 CSV 搜索(但仍采用以下通用格式)我不确定如何让 tag_config 起作用
self.outputQty.insert(INSERT,descQty)
self.outputDesc.insert(INSERT,descPN, END," ", END, descInfo)
self.dwgoutputbox.insert(INSERT, descDwg1, END, " ", END, " Issue: ",END,descIss1,END, "\n")
self.dwgoutputbox.insert(INSERT, descDwg2, END, " ", END, " Issue: ",END,descIss2,END, "\n")
self.dwgoutputbox.insert(INSERT, descDwg3, END, " ", END, " Issue: ",END,descIss3,END, "\n")
format_link()
def format_link(dwgoutputbox,tag,apply_tag):
self.dwgoutputbox.tag_config(tagName="19",foreground="blue",underline=1)
dwgoutputbox.tag_bind(tag,"<Button-1>",apply_tag)
好的,设法让它按预期工作,这主要归功于 Bryan Oakley 的帮助和耐心 - 非常感谢。
self.dwgoutputbox = Text(root, borderwidth=0, width=50, height=15, foreground="#ffffff",background="#3F3F3F", font="system_font 10")
self.dwgoutputbox.grid(row=3, column=2, columnspan=5, padx=2, pady=3)
self.dwgoutputbox.tag_config("dwg",foreground="lightblue")
self.dwgoutputbox.insert(1.0, descDwg3, "dwg", " Issue: ", "", descIss3, "", "\n")
self.dwgoutputbox.insert(1.0, descDwg2, "dwg", " Issue: ", "", descIss2, "", "\n")
self.dwgoutputbox.insert(1.0, descDwg1, "dwg", " Issue: ", "", descIss1, "", "\n")
我的一半问题是似乎没有很多/任何好的 'basic' 解释更高级的东西,这给玩了一个月 python 的新手一个很好的挑战。不过很享受:)
上面的结果现在给了我
您的代码中至少有两个问题。
首先,您错误地使用了 insert 语句。这是您的代码:
self.outputDesc.insert(INSERT,descPN, END," ", END, descInfo)
insert
命令必须将索引作为第一个参数,然后将文本作为下一个参数。之后的任何参数交替作为标签和文本。在你的例子中,文本是 descPN
的值,然后是一个名为 "end" 的标签(END
常量的值),一个 space,"end"m,然后是文字descInfo
.
其次,您从未配置标签 "end"。但是,您确实配置了一个名为 19
的标签,但您并未将该标签应用于任何文本。您需要将标记与 insert
语句一起使用,或者与 tag_add
语句一起使用。
要使用标签突出显示文本小部件中的文本,您需要做两件事:必须将标签配置为具有您想要的任何属性(颜色、字体等),并且必须将该标签添加到文本范围。
您可以使用 tag_configure
配置标签。例如,要有一个名为 "red" 的标签为文本提供红色背景,您可以这样做:
text_widget.tag_configure("red", background="red")
接下来,您需要将该标签应用于一段文本。有两种方法可以做到这一点。首先,您可以在插入文本时将标签应用于文本,方法是将标签作为参数包含在 insert
命令中:
text_widget.insert('end", "this text is red", "red")
第二种方法是将标签应用于范围。例如,要使第二行变为红色,您可以这样做:
text_widget.tag_add("red", "2.0", "2.0 lineend")