我有两个文本窗口。当用户键入/
时,此行所在的行应以黄色突出显示。两个窗口都会发生这种情况。我所遇到的错误是在左侧窗口中输入/
并未突出显示行,直到在右侧窗口中输入了带有/
的行。然后该程序按预期工作。我很困惑因为调用了相同的函数。
这是最小的代码:
#! python3
from tkinter import *
def search(text_widget):
pos = '1.0'
while True:
idx = text_widget.search('/', pos, END)
if not idx:
break
idx = idx.split('.')[0] # start of line
pos = '{}.0'.format(int(idx) + 1) # end of line
text_widget.tag_add('steno', '{}.0'.format(idx), '{}.end'.format(idx))
def changeText(*args):
if '/' in Left_Text.get(1.0, END):
search(Left_Text)
if '/' in Right_Text.get(1.0, END):
search(Right_Text)
else:
Left_Text.tag_remove('steno', 1.0, END)
Right_Text.tag_remove('steno', 1.0, END)
root = Tk()
frame = Frame(root)
Left_Text = Text(frame, width=20, height=20)
Left_Text.tag_configure('steno', background='yellow', foreground='black')
Left_Text.pack(side=LEFT, padx=5, pady=5)
Left_Text.bind("<Key>", changeText)
Right_Text = Text(frame, width=20, height=20)
Right_Text.tag_configure('steno', background='yellow', foreground='black')
Right_Text.pack(side=RIGHT, padx=5, pady=5)
Right_Text.bind("<Key>", changeText)
frame.pack()
mainloop()
答案 0 :(得分:1)
如果您输入&#34; /&#34;在左边,你首先点击这句话:
if '/' in Left_Text.get(1.0, END):
print("searching left...")
search(Left_Text)
这将按照您的意愿添加突出显示。
接下来,您有以下代码。因为条件是假的,你会落入其他地方:
if '/' in Right_Text.get(1.0, END):
print("searching right...")
search(Right_Text)
else:
Left_Text.tag_remove('steno', 1.0, END)
Right_Text.tag_remove('steno', 1.0, END)
因此,您正在添加突出显示,然后立即删除突出显示。
你应该改变你的逻辑(注意在第二种情况下使用elif
):
if '/' in Left_Text.get(1.0, END):
...
elif '/' in Right_Text.get(1.0, END):
...
else:
...
顺便说一下:小部件的第一个索引是"1.0"
,而不是1.0
。索引是字符串,而不是浮点数。浮点数在某些情况下有效,但仅限于实现的副作用。你应该养成总是使用字符串作为索引的习惯。