【问题标题】:Set to bold the selected text using tags设置为使用标签加粗选定的文本
【发布时间】:2012-04-11 15:43:48
【问题描述】:

我一直在尝试制作一个简单的文本编辑器,并且一直在尝试使用标签。我已经能够使用标签创建证明。现在我添加一个粗体选项。

我的问题是我找不到很多使用"sel" 标签的示例,这是当前选择中使用的标签。

每当我使用SEL 标记时,只要突出显示文本,它就会变为粗体,当它变为未突出显示时,它会恢复为旧字体。

这是我代码的一小部分:

def Bold(self, body, Just, Line, selected font):
    bold font = tkFont.Font(family=selectedfont, weight="bold")
    selected font = boldfont
    body.tag_config("sel",font=selectedfont)
    body.tag_add("sel", 1.0,END)

Bold 按钮被按下时,前一个函数被调用。 现在,我将body.tag_add("sel", 1.0, END) 设置为从1.0END,因为我不知道如何获取选定的域。 我试过<<Selection>>,但是试了很久,还是没用。

【问题讨论】:

    标签: python text tkinter


    【解决方案1】:

    您只需要在您的函数中使用tag_add()

    import Tkinter as tk
    
    def make_bold():
        aText.tag_add("bt", "sel.first", "sel.last")
    
    lord = tk.Tk()
    
    aText = tk.Text(lord, font=("Georgia", "12"))
    aText.grid()
    
    aButton = tk.Button(lord, text="bold", command=make_bold)
    aButton.grid()
    
    aText.tag_config("bt", font=("Georgia", "12", "bold"))
    
    lord.mainloop()
    

    我刚刚遇到了一个颇具教育意义的 example,作者是 Bryan Oakley,
    在完全不相关的搜索中!

    下面是一个更动态的替代方案的快速示例:

    import Tkinter as tk
    import tkFont
    
    def make_bold():
        current_tags = aText.tag_names("sel.first")
        if "bt" in current_tags:
            aText.tag_remove("bt", "sel.first", "sel.last")
        else:
            aText.tag_add("bt", "sel.first", "sel.last")
    
    
    lord = tk.Tk()
    
    aText = tk.Text(lord, font=("Georgia", "12"))
    aText.grid()
    
    aButton = tk.Button(lord, text="bold", command=make_bold)
    aButton.grid()
    
    bold_font = tkFont.Font(aText, aText.cget("font"))
    bold_font.configure(weight="bold")
    aText.tag_configure("bt", font=bold_font)
    
    lord.mainloop()
    

    【讨论】:

    • 谢谢,我明白了。因此 SEl 仅适用于不断突出显示的文本。如果你突出显示它就会消失。但是您可以使用该特定标签来获取域并应用另一个包含粗体的标签。谢谢,这对我有帮助,还有我计划在未来做的许多其他事情,比如彩色文本。
    • @reallycoolnerd 我刚刚更新了我的答案。您可能会发现它很有用。
    • 我花了一点时间才理解它,但我已经把它分开并能够解释它......谢谢你,它帮助了我一大堆粗体切换
    【解决方案2】:

    标签属性属于标签,不属于文本。因此,当您突出显示某些内容然后将属性应用于"sel" 标签时,它只会影响具有"sel" 标签的文本。当您删除标签(通过取消突出显示)时,属性将恢复为默认值(或任何其他可能存在的标签)。

    要使文本变为粗体,您必须创建一个具有粗体属性的标签并将该标签分配给文本。只要文本有那个标签,它就会有那个标签的属性。

    【讨论】:

    • 所以我需要获取高亮的开始位置和高亮的结束位置,并将其用作我的粗体标签中的域?
    • 没关系,我玩弄了上面的答案,但我忘了在其中一个标签上更改我的域。谢谢你,虽然这也帮助我更好地理解标签
    • @reallycoolnerd:你的syb“域”是什么意思? Tkinter 在文本小部件或任何其他小部件中没有任何名为“域”的东西。
    • 按域,我指的是 .... 中的 1.0, END。抱歉,这是我喜欢使用的微积分术语。我的意思是 .tag 应用到的区域。所以从 ("sel",1.1,1.3) 1.1 到 1.3 是我的域。我知道它不是标签中的定义,我只是将其用作通用术语。对此感到抱歉
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-13
    • 1970-01-01
    • 2012-04-16
    • 1970-01-01
    相关资源
    最近更新 更多