所以,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))
现在每个标签都有一个唯一的名称
答案 0 :(得分:1)
是的,您需要为您使用的每种不同字体创建唯一标记。在实践中,这并不是那么糟糕,因为大多数文档仅使用3-4种变体,或者可能是最糟糕的情况,可能是十几种。唯一真正的困难是,如果你想要粗体和斜体,你必须创建一个粗体标签,一个斜体标签和一个粗体斜体标签。
这是糟糕的代码,并且不可能使不同的字体/大小。
它不会让它变得不可能,只是有点困难。您的代码实际上与您的代码非常接近。
当用户更改角色的样式时,您需要通过组合当前样式和任何新属性来为样式名称创建规范表单。例如,如果角色当前是粗体12点并且它们将其更改为斜体14点,则新标签可能是“斜体-12”。如果他们想要保持粗体,它可能是“粗体 - 斜体-12”。然后,您需要检查是否有该名称的标记,如果不是,则创建它,然后删除任何以前的字体标记并添加新的字体标记。
这实际上只是字体的一个问题。对于其他属性(如颜色和边框),您可以单独使用所有不同的标记(即:如果为“background-blue”和“foreground-red”创建标记,则可以将这两个标记分别应用于文本。
我提供了一个与此类似的例子:https://stackoverflow.com/a/3736494/7432