簡體   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