我正在制作一个文本编辑器,我正在使用Pygments来帮助语法高亮显示。当我键入关键字时,比如说for
,它会变为黄色,good。嗯,当我在后面键入字母时,比如说,fore
,for
仍然是黄色的,或者如果我退格,fo
或f
是黄色的。
为什么不变回黑色/清除颜色?有没有高效的方法来做到这一点?我的代码,只是在需要的情况下,如下所示,没有错误,所以我将只包括突出显示功能,即使它本身可能是不需要的。
如果需要的话我会写更多的
import sys #imports
from pygments import highlight
from pygments.lexers import PythonLexer #python syntax highlighter
from pygments import lex
major_version = sys.version_info.major
if major_version == 2: #check python version for importing tkinter
from Tkinter import *
import tkFileDialog
elif major_version == 3:
from tkinter import *
import tkinter.filedialog as tkFileDialog
else:
raise RuntimeError('Unexpected python major version: %d' % major_version)
def highlight(t, previousContent):
content = t.get("1.0", END)
lines = content.split("\n")
if(content != previousContent):
t.mark_set("range_start", "1.0")
data = t.get("1.0", "end-1c")
for token, content in lex(data, PythonLexer()):
t.mark_set("range_end", "range_start + %dc" % len(content))
t.tag_add(str(token), "range_start", "range_end")
t.mark_set("range_start", "range_end")
def highlightLine(t, previousContent):
content = t.get("1.0", END)
lines = content.split("\n")
currentCursorPosition = t.index(INSERT)
currentCursorPositionSplit = currentCursorPosition.split(".")
currentLine = currentCursorPositionSplit[0]
currentColumn = currentCursorPositionSplit[1]
if(content != previousContent):
t.mark_set("range_start", str(currentLine) + ".0")
data = t.get(str(currentLine) + ".0", str(currentLine) + "." + str(currentColumn))
for token, content in lex(data, PythonLexer()):
t.mark_set("range_end", "range_start + %dc" % len(content))
t.tag_add(str(token), "range_start", "range_end")
t.mark_set("range_start", "range_end")
def initHighlight(t):
t.tag_configure("Token.Keyword", foreground="#CC7A00")
t.tag_configure("Token.Keyword.Constant", foreground="#CC7A00")
t.tag_configure("Token.Keyword.Declaration", foreground="#CC7A00")
t.tag_configure("Token.Keyword.Namespace", foreground="#CC7A00")
t.tag_configure("Token.Keyword.Pseudo", foreground="#CC7A00")
t.tag_configure("Token.Keyword.Reserved", foreground="#CC7A00")
t.tag_configure("Token.Keyword.Type", foreground="#CC7A00")
t.tag_configure("Token.Name.Class", foreground="#003D99")
t.tag_configure("Token.Name.Exception", foreground="#003D99")
t.tag_configure("Token.Name.Function", foreground="#003D99")
t.tag_configure("Token.Operator.Word", foreground="#CC7A00")
t.tag_configure("Token.Comment", foreground="#B80000")
t.tag_configure("Token.Literal.String", foreground="#248F24")
这个问题不是问如何从文本中删除所有标签,而是问如何检查被标记的单词是否不再是理想的单词,然后删除该单词上的标签。如果我删除所有的标签,然后延迟所有的东西,那就太滞后了。
在标记之前,在同一个函数中,我添加了
for tag in t.tag_names():
t.tag_remove(tag, str(currentLine) + ".0", str(currentLine) + "." + str(currentColumn))
它检查所有标记,然后删除当前行中的标记,然后再将它们添加回,完整功能如下所示:
def highlightLine(t, previousContent):
content = t.get("1.0", END)
lines = content.split("\n")
currentCursorPosition = t.index(INSERT)
currentCursorPositionSplit = currentCursorPosition.split(".")
currentLine = currentCursorPositionSplit[0]
currentColumn = currentCursorPositionSplit[1]
if(content != previousContent):
t.mark_set("range_start", str(currentLine) + ".0")
data = t.get(str(currentLine) + ".0", str(currentLine) + "." + str(currentColumn))
for tag in t.tag_names():
t.tag_remove(tag, str(currentLine) + ".0", str(currentLine) + "." + str(currentColumn))
for token, content in lex(data, PythonLexer()):
t.mark_set("range_end", "range_start + %dc" % len(content))
t.tag_add(str(token), "range_start", "range_end")
t.mark_set("range_start", "range_end")
现在效果很好!
有没有一种方法可以随意改变本地传单中的标记颜色?我使用的是svg元素,可以进行样式化。我知道使用Mapbox.js是可能的 编辑:为了澄清我打算做的:如果你通过双击或其他方式向地图添加标记,它应该有随机的颜色。为了实现这一点,我想使用svg图标来对标记进行样式化。 这是我的代码:
我读了一些线来改变这里的颜色。但我的问题有点不同 我使用下面的代码在谷歌地图中设置了一个标记 默认标记颜色为红色,我需要将该红色更改为我所拥有的颜色: 资源-- 怎么做呢?
问题内容: 我正在制作“来自地狱的GUI”,并且试图使JFrame闪烁颜色(快速更改背景)的时间足够长,令人讨厌。这就是我得到的: 注意: 如果您知道如何轻松地使整个JFrame及其所有内容更改颜色(而不仅仅是背景),那将是非常疯狂和令人敬畏的,因此让我们开始吧。 任何指导表示赞赏!希望我不仅错过了一些愚蠢的事情… …如果您对可笑的GUI效果有一个或两个想法,请随时分享! :) 问题答案: 这是我
我试图弄清楚如何更改JTable中一行中单词的颜色。 例如,这是我的句子,在一行中; dmpsrv日志“2013年3月12日星期二15:33:03”(格林尼治标准时间)(DB=SS@2)pid=662node=“B2-W4”执行时间=1(s) 每一行的结构都是相同的,我想用粗体显示用户名。 但是我不知道我该怎么做?有人给点诡计吗? 谢谢
我很难弄明白为什么传单方法会改变多边形的颜色,而不是我的标记的颜色。 多边形很好: 但是标记不会改变颜色: 我使用Angular和传单一起制作地图(我使用Angular-传单-指令)。 以下是代码的mouseover部分: 当标记get被mouse覆盖时,它会激发,然后尝试调用LeafletEvent.target上的setStyle。我已经安慰了。记录了LeafletEvent,确实有它的目标部
我从Font Awesome下载了一个SVG文件,我将它呈现为: 但是SVG呈现为黑色,这不是我需要的颜色。我可以打开SVG文件并手动更改颜色,但是如果我需要相同的黑色SVG,我需要创建一个副本并将颜色再次更改为黑色。 这就是为什么我想知道是否可以使用CSS动态地改变颜色?