【问题标题】:Tkinter, adding widgets in an embedded Frame widget in a Text widgetTkinter,在文本小部件中的嵌入式框架小部件中添加小部件
【发布时间】:2021-06-08 00:25:32
【问题描述】:

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

例如,我有一个 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()

上面的代码会生成这个:

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

感谢您的帮助!!

【问题讨论】:

  • 向框架添加标签的方式与向任何其他框架添加标签的方式相同。你试过吗?
  • @Bryan Oakley,对不起,Bryan,我不太明白你的意思。在我的示例代码中没有与 Frame 对象关联的变量,如何引用它们?您的意思是类似于@acw1668 在下面发布的答案吗?或者你能分享一个例子吗?谢谢!
  • “在我的示例代码中没有与 Frame 对象关联的变量,如何引用它们?” - 通过将对框架的引用保存在变量。
  • 我明白了,谢谢。

标签: python tkinter text widget


【解决方案1】:

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

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()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-29
    • 1970-01-01
    • 1970-01-01
    • 2014-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多