[英]Python Tkinter canvas inside canvas
该文档建议我应该能够在一个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
早于outercanvas
,因为同一Frame的子级, inframe
仍保留在画布下方,因此不可见。 (这是在python 2.7中进行的,也许已在您使用的版本中进行了修复。)将外outercanvas
的创建向上移动几行即可解决此问题; 你也许会想使inframe
的孩子outercanvas
,而不是一个兄弟姐妹,更能体现你的小部件的层次结构。
需要注意的是inframe
实际上并不需要在所有-你可以有使用create_window()
直接添加innercanvas
到outercanvas
。
from tkinter import *
class MainWindow(Frame):
def __init__(self):
super().__init__()
self.pack(expand=Y,fill=BOTH)
outercanvas = Canvas(self, width=200, height=100, bg='#00ffff')
outercanvas.pack(expand=Y,fill=BOTH)
innercanvas = Canvas(outercanvas, width=100, height=50)
outercanvas.create_window(50, 25, anchor=NW, window=innercanvas)
innercanvas.create_text(10, 10, anchor=NW, text="Hello")
root = MainWindow()
root.mainloop()
画布里面的这个画布对我有用!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.