Tkinter,在文本小部件中的嵌入式框架小部件中添加小部件

Tkinter, adding widgets in an embedded Frame widget in a Text widget

我知道我们可以使用 Text 方法在文本小部件中添加嵌入式小部件。window_create()。但是是否可以将其他小部件添加到此嵌入式小部件上?

例如,我有一个 Text 小部件,我想在每一行下面添加一个 Frame 小部件,并且想使用这个嵌入式 Frame 小部件作为添加的容器,例如用于显示文本特定部分的特征和注释的标签小部件。

我怎样才能实现,或者有其他方法吗?

这是一些示例代码:

from tkinter import *

root = Tk()
myText = Text(root)
myText.pack()

text = """ACAACATACGAGCCGGAAGCATAAAG
TGTAAAGCCTGGGGTGCCTAATGAGT
GAGCTAACTCACATTAGGCTGAATTA
GGCGCGCCT"""

mylist = text.splitlines()

for row in range(len(mylist)):    
    myText.insert('end', mylist[row])
    myText.insert("end", '\n')
    myText.window_create('end', window=Frame(myText, width=180), stretch=1)
    myText.insert("end", '\n')

root.mainloop()

上面的代码会生成这个:

使用上面的示例代码,我如何在这些框架上添加额外的小部件(例如标签),以便我可以显示对文本的某些片段的描述。

感谢帮助!!

您可以将框架存储在列表中,然后使用该列表访问要为其添加标签的单个框架:

frames = []  # store the frames
for row in range(len(mylist)):    
    myText.insert('end', mylist[row])
    myText.insert("end", '\n')
    frames.append(Frame(myText, width=180)) # create frame and store it in frames
    myText.window_create('end', window=frames[-1], stretch=1)
    myText.insert("end", '\n')

# add a label to each frame
for i, frame in enumerate(frames, 1):
    Label(frame, text=f"Hello in frame #{i}").pack()