Canvas 内的 Python Tkinter Canvas

标签 python tkinter

文档建议我应该能够将 Frame 对象放置在 Canvas 内,并且该 Frame 对象本身可以包含 Canvas。我想知道为什么下面的玩具代码不起作用。我在任何地方都看不到字符串“hello”,只看到蓝色的“outercanvas”。我做错了什么?

from tkinter import *
class MainWindow(Frame):
def __init__(self):
    super().__init__()
    self.pack(fill=Y, side = LEFT)
    inframe = Frame(self)
    innercanvas = Canvas(inframe, width=20, height=20)
    innercanvas.create_text(10, 10, anchor=NW, text="Hello")

    outercanvas = Canvas(self, width=100, height=100, bg='#00ffff')
    outercanvas.create_window(0, 0, anchor=NW, window=inframe)
    outercanvas.pack(side=LEFT)

root = MainWindow()
root.mainloop()

最佳答案

您看不到 innercanvas 的主要原因是您从未在其上调用 .pack() (或其他几何管理器),因此包含的 inframe 不知道要显示它。

修复这个问题实际上并没有使代码正常工作,我发现这相当令人惊讶 - 显然,因为您创建 inframe 早于 outercanvas,作为同一个子级框架、inframe 仍然分层在 Canvas 下方,因此不可见。 (这是 Python 2.7 的问题,也许您正在使用的版本已修复它。)将 outercanvas 的创建向上移动几行可以解决此问题;您可能希望将 inframe 设为 outercanvas 的子级而不是同级,以更好地反射(reflect)小部件的层次结构。

请注意,实际上根本不需要 inframe - 您可以使用 create_window() 直接将 innercanvas 添加到 outercanvas .

关于 Canvas 内的 Python Tkinter Canvas ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43729836/

相关文章:

python - 如何使 tkinter 输入字段强制输入一些文本?

python - 我的计算器 Python Tkinter 的按钮大小

python - 使用 Tkinter 显示一系列 PIL 图像

python - Tkinter 在两个 Canvas 中绘制

python - 如何打印 tkinter Scale 小部件的值?

python - 将变量保存在文本文件中

python - 如何在Beautiful Soup中找到所有段落中的所有链接

python - 将markdown图像格式转换为html

python - max 如何用于混合类型列表

python - 按另一个列表的顺序对 python 列表进行排序并检索旧索引