[英]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.