繁体   English   中英

画布内部的Python Tkinter画布

[英]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()直接添加innercanvasoutercanvas

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM