2017-02-02 109 views
0

所以,tkinter文本编辑器!
编辑器显然需要有文本样式,需要使用标签将打印文本更改为当前选择的格式。但问题是标签名称在格式更改时需要更改,否则标签将应用于整个文本。 (这是我努力找出相当长的一段时间的问题)
为了避免这种情况,你需要的标签很多(如bold, both, calibri等),所以代码看起来像这样tkinter - 管理多个标签

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)) 

感谢您的帮助

UPDATE
从布莱恩

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

textbox.tag_add(tagname, 'insert -1c', 'insert') 
textbox.tag_configure(tagname, font=(font, fontsize, weight, slant)) 
有帮助不小的解决

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

回答

1

是的,您需要为您使用的每种不同字体创建一个唯一的标签。实际上,这并不是很糟糕,因为大多数文件只使用3-4个变体,或者可能是十几个最差的情况。唯一真正的困难是,如果你想同时使用粗体和斜体,你必须创建一个粗体标签,一个斜体标签和一个粗体斜体标签。

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

它不会使它变得不可能,只是有点困难。你的代码实际上很接近你如何去做。

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

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

我提供了做类似这样的东西在这里一个例子:https://stackoverflow.com/a/3736494/7432

+0

猜你要觉得有时候框外,由于 – EriktheRed

+0

@EriktheRed:Tkinter的更像是一家木材店比一个家具店你。可以与Tkinter创建非常好的界面,但有时您必须自己完成这项工作。 –