Python 设置为使用标记加粗选定文本

Python 设置为使用标记加粗选定文本,python,text,tkinter,Python,Text,Tkinter,我一直在努力制作一个简单的文本编辑器,并一直在尝试使用标签。我已经能够使用标签创建证明。现在我添加了一个大胆的选项 我的问题是,我找不到很多使用“sel”标记的示例,该标记用于当前选择 每当我使用SEL标记时,只要文本高亮显示,文本就会变为粗体;当文本变为非高亮显示时,文本就会恢复为原来的紧身字体 这是我代码的一小部分: def Bold(self, body, Just, Line, selected font): bold font = tkFont.Font(family=sele

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

我的问题是,我找不到很多使用
“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.0
设置为
END
,因为我不知道如何获取所选域。
我尝试过
,但经过长时间的实验,它对我没有帮助。

您只需要在函数内部使用
标记添加()

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()
我碰巧遇到了一个很有教育意义的人,正是布莱恩·奥克利,
在一个完全无关的搜索

下面是一个更具动态性的备选方案的快速示例:

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”
标记时,它只影响具有
“sel”
标记的文本。移除标记(通过取消高亮显示)时,属性将恢复为默认值(或任何可能存在的其他标记)


要使文本加粗,必须创建具有加粗属性的标记,并将该标记指定给文本。只要文本具有该标记,它就具有该标记的属性。

因此我需要获取突出显示的开始位置和结束位置,并将其用作粗体标记中的域?不要紧,我反复使用了上述答案,但忘了更改其中一个标记上的域。谢谢,虽然这也帮助我理解了很多标签better@reallycoolnerd:你说“域名”是什么意思?Tkinter在文本小部件或任何其他小部件中都没有命名为“域”的名称。按域,我指的是1.0,以…结尾。对不起,这是我喜欢使用的微积分术语。我指的是应用.tag的区域。所以从(“sel”,1.1,1.3)1.1到1.3是我的领域。我知道它不是标签中定义的,我只是用它作为一个通用术语。对不起,谢谢,我理解。因此SEl仅适用于不断高亮显示的文本。如果你突出显示,它就会消失。但您可以使用该特定标记获取域并应用另一个包含粗体字体的标记。谢谢你,这帮助了我完成了这件事,以及我计划在将来做的许多其他事情,比如彩色文本。@reallycoolnerd我刚刚更新了我的答案。你可能会发现它很有用。我花了一点时间才理解它,但我已经把它分开了,并且能够解释它……谢谢你,它为我的大胆切换提供了很多帮助