【问题标题】:tkinter - managing multiple tagstkinter - 管理多个标签
【发布时间】:2017-06-19 21:30:29
【问题描述】:

所以,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))

感谢您的帮助

更新
在 Bryan 的帮助下解决了

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

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

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

【问题讨论】:

    标签: python text tkinter tags


    【解决方案1】:

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

    这是很糟糕的代码,无法使用不同的字体/大小。

    这并不是不可能的,只是有点困难。您的代码实际上非常接近您的操作方式。

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

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

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

    【讨论】:

    • 猜你有时必须跳出框框思考,谢谢!
    • @EriktheRed:tkinter 更像是一家木材店,而不是一家家具店。您可以使用 Tkinter 创建非常好的界面,但有时您必须自己完成工作。
    猜你喜欢
    • 2020-01-11
    • 2013-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-04
    • 1970-01-01
    相关资源
    最近更新 更多