Python tkinter-管理多个标记

Python tkinter-管理多个标记,python,text,tkinter,tags,Python,Text,Tkinter,Tags,所以,tkinter文本编辑器 编辑器显然需要具有文本样式,这需要使用标记将键入的文本更改为当前选择的任何格式。但问题是,当格式更改时,标记名需要更改,否则标记将应用于整个文本。 (这是一个我很长一段时间以来一直在努力确定的问题) 为了避免这种情况,您需要很多标记(比如粗体,两者都有,calibri等等),所以代码看起来像这样 if style == 'bold': tag_add('bold', 'insert -1c', 'insert') tag_configure('bo

所以,tkinter文本编辑器
编辑器显然需要具有文本样式,这需要使用标记将键入的文本更改为当前选择的任何格式。但问题是,当格式更改时,标记名需要更改,否则标记将应用于整个文本。 (这是一个我很长一段时间以来一直在努力确定的问题)
为了避免这种情况,您需要很多标记(比如
粗体,两者都有,calibri
等等),所以代码看起来像这样

if style == 'bold':
    tag_add('bold', 'insert -1c', 'insert')
    tag_configure('bold', font=('Calibri', 12, 'bold'))

if stlye == 'italic':
    etc etc
这是一个糟糕的代码,无法使用不同的字体/大小。
有没有一种正确的方法来组织多个标签,比如

tag.add(currentstyle, 'insert -1c', 'insert')
tag.config(currentstyle, font=(currentfont, currentsize, currentweight, currentslant))
谢谢你的帮助

更新
在布莱恩的帮助下解决了这个问题

tagname = '{}-{}-{}-{}'.format(font, fontsize, weight, slant)

textbox.tag_add(tagname, 'insert -1c', 'insert')
textbox.tag_configure(tagname, font=(font, fontsize, weight, slant))

现在每个标记都有一个唯一的名称

是的,您需要为您使用的每个不同字体创建一个唯一的标记。实际上,这并不是那么糟糕,因为大多数文档只使用3-4个变体,或者最坏的情况可能是12个。唯一真正的困难是,如果同时需要粗体和斜体,则必须创建粗体标记、斜体标记和粗体斜体标记

这是一个糟糕的代码,并且不可能使用不同的字体/大小

这并不是说不可能,只是有点困难。您的代码实际上非常接近您将要执行的操作

当用户更改角色的样式时,需要通过组合当前样式和任何新属性为样式名称创建规范形式。例如,如果字符当前为粗体12点,他们将其更改为斜体14点,则新标记可能为“italic-12”。如果他们想保留粗体字,可以使用“bold-italic-12”。然后,您需要检查是否有该名称的标记,如果没有,则创建该标记,然后删除任何以前的字体标记并添加新的字体标记

这实际上只是字体的问题。对于颜色和边框等其他属性,您只需分别使用所有不同的标记即可(即:如果您为“背景蓝”和“前景红”创建标记,则可以将这两个标记分别应用于文本


我在这里提供了一个类似的例子:

我猜你有时必须跳出框框思考,谢谢!@EriktheRed:tkinter更像是一家木材店,而不是家具店。你可以与tkinter创建非常好的界面,但有时你必须自己做这项工作。