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()
我知道我们可以使用 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()