【发布时间】:2020-10-29 23:46:53
【问题描述】:
我是 tkinter 的新手,我想使用 tkinter 标签实现文本的突出显示和取消突出显示。我尝试了tag_remove() 方法,但在我的情况下这是错误的,所以我想以这种方式实现突出显示和取消突出显示。我希望在我按键盘上的“a”时突出显示文本,在按“x”时取消突出显示,并在按“a”时再次突出显示。有什么方法可以设置标签的优先级以实现我的目标?任何帮助将不胜感激。提前致谢!
from tkinter import *
import tkinter as tk
from tkinter import Frame, Menu
from tkinter import ttk
class AnnotationTool(tk.Frame):
def __init__(self, master):
tk.Frame.__init__(self, master)
self.tagA='INGREDIENT'
self.keyA='a'
self.results_field = Text(self)
self.results_field.config(height=20,spacing1=5,wrap='word',undo=True)
self.results_field.grid(pady=10,column=3,row=3,padx=10,rowspan=12)
self.results_field.insert('insert','abc def ghi')
self.results_field.focus()
self.results_field.tag_configure(self.tagA, background="yellow")
self.results_field.tag_configure('hide', background="white")
self.results_field.bind(self.keyA, self.onKeyPressA)
self.results_field.bind('x', self.onKeyPressX)
def onKeyPressA(self,event):
self.results_field.tag_add(self.tagA, 'sel.first', 'sel.last')
return "break"
def onKeyPressX(self,event):
self.results_field.tag_add('hide','sel.first', 'sel.last')
return "break"
class App(tk.Tk):
def __init__(self):
tk.Tk.__init__(self)
self._frame = None
self.switch_frame(AnnotationTool)
self.title('App')
def switch_frame(self, frame_class):
new_frame = frame_class(self)
if self._frame is not None:
self._frame.pack_forget()
self._frame = new_frame
self._frame.pack()
def main():
app=App()
app.geometry("1300x1000")
app.mainloop()
if __name__ == '__main__':
main()
【问题讨论】:
-
是的,使用
tag_raise方法。 effbot.org/tkinterbook/… -
如果你想去掉高亮,
tag_remove是这样做的。如果它给你一个错误,请显示错误。 -
它本身并没有给出错误,但它不能正常工作。