Python 3.x Tkinter.see()方法不在文本框1中滚动。它只是在动态创建的最后一个文本框中滚动

Python 3.x Tkinter.see()方法不在文本框1中滚动。它只是在动态创建的最后一个文本框中滚动,python-3.x,tkinter,Python 3.x,Tkinter,说明 我创建了一个数字为1-100的文本小部件(text_widget1) 我又创建了3个文本小部件(文本小部件1-3),编号为1-1000 我标记了从text_widget1到text_widget 1-3的数字。 现在我使用.see(index)方法查找文本框1中单击的数字,并同时自动滚动“所有文本”窗口小部件1-3 但是,当我单击textbox1中的数字时,.see()方法仅适用于textbox 20,而不适用于textbox 00和textbox 10 问题: 我希望自动滚动同时适用于所

说明

我创建了一个数字为1-100的文本小部件(text_widget1)

我又创建了3个文本小部件(文本小部件1-3),编号为1-1000

我标记了从text_widget1到text_widget 1-3的数字。 现在我使用.see(index)方法查找文本框1中单击的数字,并同时自动滚动“所有文本”窗口小部件1-3

但是,当我单击textbox1中的数字时,.see()方法仅适用于textbox 20,而不适用于textbox 00和textbox 10

问题: 我希望自动滚动同时适用于所有三个文本窗口小部件(1-3)

请参见下面的代码作为示例。只需运行Python 3的演示的全部代码即可

import tkinter as tk

root = tk.Tk()

for k in range(3):
    text1 = tk.Text(root, width = 35, height = 39)
    text1.grid(row=0, column=k+1) # grid instead
    text1.insert("end", "TEXTBOX " + str(k))

    for i in range(1000):        
        text1.insert("end", i)
        text1.insert("end", "\n\n")

def add_hyperlink(section, tag):
    # when you insert text, you can directly give it tags with 
    # text.insert(<index>, <text>, [tag1, tag2, ...])
    text.insert('end', section , ('link', tag))
    for i in range(5):
        pos_start = text1.search(section, '1.0', "end")
        text.tag_bind(tag, '<Button-1>', lambda e: text1.see(pos_start))

text = tk.Text(root, width = 35, height = 39)
text.grid(row=0, column=0) # grid instead
text.tag_configure('link', foreground='blue', underline=True)
text.insert("end", "(TEST WIDGET 1): Number which I want to find and auto scroll in the Textbox 00, 10, and 20 when I click it \n\n")
for i in range(100):
    add_hyperlink(str(i), i+2)
    text.insert("end", "\n")

#text.pack()
root.mainloop()
将tkinter作为tk导入
root=tk.tk()
对于范围(3)内的k:
Text 1=tk.Text(根,宽=35,高=39)
text1.grid(行=0,列=k+1)#改为grid
text1.插入(“结束”、“文本框”+str(k))
对于范围(1000)内的i:
正文1.插入(“结束”,i)
text1.插入(“结束”、“\n\n”)
def添加超链接(节,标记):
#插入文本时,可以直接使用
#文本。插入(,[tag1,tag2,…)
text.insert('end',section,('link',tag))
对于范围(5)中的i:
pos_start=text1.搜索(第1.0节,“结束”)
text.tag_bind(tag',lambda e:text1.参见(pos_start))
text=tk.text(根,宽=35,高=39)
text.grid(行=0,列=0)#改为grid
text.tag\u configure('link',前台='blue',下划线=True)
text.insert(“end”,“(测试小部件1):我要在文本框00、10和20中查找并在单击时自动滚动的编号\n\n”)
对于范围(100)内的i:
添加超链接(str(i),i+2)
文本。插入(“结束”、“\n”)
#text.pack()
root.mainloop()
问题:

当我单击文本小部件1中的数字时,它会查找并滚动该数字,但仅在文本框20中。它不会在文本框00和文本框10中滚动。
我希望在所有文本框00、10和20中完成自动滚动。

您需要将所有文本小部件存储在一个列表中,然后在每个小部件上调用
see
方法

首先在代码顶部初始化一个数组:

widgets = []
接下来,将每个文本小部件添加到数组中:

text1 = tk.Text(...)
widgets.append(text1)
接下来,在所有小部件上定义一个调用
see
方法的函数:

def autoscroll(pos):
    for widget in widgets:
        widget.see(pos)
最后,调整绑定以调用此新方法:

text.tag_bind(tag, '<Button-1>', lambda e, index=pos_start: autoscroll(index))
text.tag\u bind(tag',lambda e,index=pos\u start:autoscroll(index))

嗯,您只需要调用
。请参阅单个文本小部件上的
。为什么你认为其他人也会滚动?您是否考虑过编写一个显式滚动所有小部件的函数?当动态创建小部件时,您如何做到这一点?就像我在创建一个新的文本框一样,当用户单击一个按钮(按钮a)并按下另一个按钮(按钮b)时,它会在所有文本框中输入文本。就像按下按钮a 6次一样,使用for循环创建6个文本框,创建的所有文本框都具有相同的名称,但它们使用网格并排打包。i、 e.:愤怒的我(5);text1=tk.Text(框架);text1.grid(行=0,列=i)。每次循环运行时,都会在上一个文本框的右侧创建一个文本框。然后按下按钮b来填充文本。我有一个问题。为什么我不能在widget中使用:-for wid:pos_start=wid.search(单词,'1.0','end')wid.see(pos_start)而不是:-text.tag_bind(tag','lambda e,index=pos_start:autoscroll(index))。它引发的错误是:错误的文本索引“”