文档建议我应该能够在 Canvas 内定位一个 Frame 对象,并且该 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
,作为同一 Frame 的孩子,inframe
仍然在画布下方分层,因此不可见。(这是在 Python 2.7 中使用的,也许它已在您使用的版本中修复。)将创建outercanvas
向上移动几行可以解决此问题;您可能希望创建inframe
一个子项outercanvas
而不是兄弟项,以更好地反映小部件的层次结构。
请注意,inframe
实际上根本不需要 - 您可以使用create_window()
直接添加innercanvas
到outercanvas
.
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句