Python 2.7 Tkinter标签虽然有效但未显示

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 2.7 Tkinter标签虽然有效但未显示相关的知识,希望对你有一定的参考价值。

我目前正在为建模语言开发一个文本编辑器(在Python 2.7中)。除了在文本小部件中添加了许多标记的情况下tkinker的行为外,一切都按预期工作。为了突出模型中的注释,我使用循环遍历整个文本,找到包含“#”标记的每一行,收集该符号的起始点,然后标记整行(从#开始) )作为评论:

def color_sl_comments(self):
    complete_text_as_lines = self.text.get('1.0', tk.END + '-1c').splitlines()
    for line in complete_text_as_lines:
        if '#' in line:
            s_l = complete_text_as_lines.index(line) + 1
            s_c = line.index('#')
            e_l = s_l
            e_c = len(line)
            self.color_comment(s_l, s_c, e_l, e_c)

def color_comment(self, sl, sc, el, ec):
    name = "comment%s.%s.%s.%s." % (sl, sc, el, ec)
    self.text.tag_add(name, "%s.%s" % (sl, sc), "%s.%s" % (el, ec))
    self.text.tag_config(name, background="white", foreground="grey")

第一条注释的颜色按预期更改,但最后一条注释仍保留默认的着色模式。然而,在调试代码之后,我发现相应的标签被分配给文本,即标签都在那里,但窗口中的颜色根本没有改变。更有趣的一点是:如果我更新相应的注释,例如添加一个附加字符,则正确显示注释颜色。删除此字符将还原着色架构,文本不再显示为注释。这似乎是tkinker中的一个错误,虽然存在,但并未显示所有标记。代码的不同部分完全相同,但对于多行注释。这里,第一个ML-comment被正确着色,但第二个没有。由于项目太大而无法粘贴在这里,这里有一个link。样本模型位于源目录中。

答案

据我所见,你的问题似乎是重复的线条。当两条或更多条线相同时,complete_text_as_lines.index(line)将返回第一条线。

而不是使用index(),使用

for number, line in enumerate(complete_text_as_lines):

这样,number将始终是正确的行号(在你做+1之后)


另外我注意到,因为你将背景设置为白色,selectbackground也是白色的,这使得无法看到你所选择的内容。要有标准的高亮颜色selectbackground="SystemHighlight"适合我。

以上是关于Python 2.7 Tkinter标签虽然有效但未显示的主要内容,如果未能解决你的问题,请参考以下文章

Python 2.7 - CentOS 7 - ImportError: No module named Tkinter

Python 2.7:通过 Ttk 的主题“通用对话框”tkinter 接口?

如何使用 Tkinter 在 Python 2.7 中创建等宽列

python图形界面:首选Tkinter

在 tkinter 标签 Python 中显示平方根符号

matplotlib.pyplot 在 python 2.7 上给出错误“ImportError:没有名为 Tkinter 的模块”