tkinter tag_config不起作用

时间:2016-09-20 04:50:14

标签: python tkinter

我正在tkinter-python中构建一个类似于应用程序的记事本。可以选择更改应用程序文本字段中写入的文本的字体。

我创建了一个Font Chooser弹出屏幕,可以在点击' font'从主窗口调用。 menu,它基本上创建一个FontChooser类对象并传递给主窗口,该窗口设置man窗口中的字体。

在主窗口中设置字体的代码示例是

root = Tix.Tk(className="Notepad")
notepad = ScrolledText(root, width=100, height=100)

def open_font():
    font = MyFont.askChooseFont(root)
    notepad.tag_add("bt", "sel.first", "sel.last")
    notepad.tag_config("bt", font=font.getFontTuple())

现在,当我第一次运行应用程序并选择一部分文本并更改字体时,它可以正常工作。但在那之后,无论我选择和更改字体的文本部分是什么,它都忽略了选择并在整个文本上应用了字体。谁能告诉我这里的问题是什么?

1 个答案:

答案 0 :(得分:0)

IDLE使用tag_config语法颜色python代码,它适用于过去15年的所有Python版本和主要操作系统。

要想知道为什么它似乎失败了,你需要找到失败的MCVE。在没有tix和滚动条的情况下启动。 (Tix在3.6中已弃用,并且错误未被修复。)另请注意,您的代码对每个选择使用相同的标记,因此当您更改配置时,它将适用于所有先前的选择。

以下是按预期和预期工作的简化代码。

import tkinter as tk
import time
root = tk.Tk()
text = tk.Text(root)
text.pack()
text.insert('1.0', "line 1\nline 2\nline 3\n")
text.tag_add('bg', '1.0', '1.4')
text.tag_config('bg', background='red')
root.update()
time.sleep(1)
text.tag_add('bg', '2.0', '2.4')
text.tag_config('bg', background='blue')
root.update()

您可以尝试逐步修改它,直到它重现您的问题或做您想要的。

使用示例修改进行编辑:使用' sel.first'和' sel.last'而不是硬编码索引。

import tkinter as tk
import time
root = tk.Tk()
text = tk.Text(root)
text.pack()
text.insert('1.0', "line 1\nline 2\nline 3\n")
root.update()  # make text visible for selection
input('select some text')
text.tag_add('bg', 'sel.first', 'sel.last')
text.tag_config('bg', background='red')
root.update()  # make change visible
input('select some text')
text.tag_add('bg', 'sel.first', 'sel.last')
text.tag_config('bg', background='blue')
root.update()  # make 2nd change visible
input('look at result')

在控制台中运行。移动tk窗口,以便控制台和GUI都可见。根据提示进行选择。单击console *并单击return以允许输入语句返回。重复。对我来说,结果是两个选择,但不是一切,变成蓝色。我建议在下一个实验中更改字体而不是bg颜色。

  • 在Windows上,当单击控制台时,tk窗口中的选择突出显示消失,因为Windows一次只允许在一个窗口中进行可见选择。但是,选择标记仍然存在于文本小部件中,因此tag_add仍然有效。