2017-05-02 17 views
0

Docsは、私がCanvas内にFrameオブジェクトを配置することができ、そのFrameオブジェクト自体がCanvasを含むことができることを示唆しています。私はなぜ次のおもちゃのコードが動作しないのだろうかと思います。私は文字列 "こんにちは"どこにも、単に青い "outercanvas"が表示されません。私は間違って何をしていますか?キャンバス内のPython Tkinterキャンバス

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() 

答えて

2

あなたがinnercanvasを見ていない主な理由は、あなたがそれに.pack()(または別のジオメトリマネージャ)と呼ばれることはありませんということですので、含むinframeは、それを表示するには知りません。

実際にコードの仕事をしなかった固定が、私はこれはかなり驚くべき発見 - どうやら、あなたはoutercanvasよりinframe先に作成しているので、同じフレームの子として、inframeがキャンバスの下に重ねたまま、したがって、見えませんでした。 (これはPython 2.7で、おそらく使用しているバージョンで修正されています)。outercanvasの作成を数行上に移動すると、これが修正されます。兄弟の代わりにinframeの子をoutercanvasにすると、ウィジェットの階層構造をよりよく反映させることができます。

inframeは実際には必要ありません。create_window()を直接使用してinnercanvasoutercanvasに直接追加することができます。

+0

愚か者!私はそれを逃したとは信じられません。どうも – user3474688

関連する問題