tkinter - 管理多个标签

时间:2017-02-02 17:23:07

标签: python text tkinter tags

所以,tkinter文本编辑器!
编辑器显然需要有文本样式,需要使用标记将键入的文本更改为当前选择的任何格式。但问题是标签名称需要在格式更改时更改,否则标签将应用于整个文本。 (这是我在很长一段时间内难以辨认的问题) 为了避免这种情况,你需要很多标签(比如bold, both, 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))

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

1 个答案:

答案 0 :(得分:1)

是的,您需要为您使用的每种不同字体创建唯一标记。在实践中,这并不是那么糟糕,因为大多数文档仅使用3-4种变体,或者可能是最糟糕的情况,可能是十几种。唯一真正的困难是,如果你想要粗体和斜体,你必须创建一个粗体标签,一个斜体标签和一个粗体斜体标签。

  

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

它不会让它变得不可能,只是有点困难。您的代码实际上与您的代码非常接近。

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

这实际上只是字体的一个问题。对于其他属性(如颜色和边框),您可以单独使用所有不同的标记(即:如果为“background-blue”和“foreground-red”创建标记,则可以将这两个标记分别应用于文本。

我提供了一个与此类似的例子:https://stackoverflow.com/a/3736494/7432