2016-11-09 1 views
2

ラベルを使用してデータを表示しています。しかし、私はそれらのすべてを同じウィンドウに収めることができないので、お互いの下に配置された非常に多くのラベルを持っています。スクロールバーを使ってラベルをスクロールしたいしかし、私がこれを読んだので、これはあまり簡単ではありません。私が理解しているように、フレームを使用してすべてのラベルを集め、そのフレームをキャンバスに挿入してから、スクロールバーと並行して使用することができます。 私は私のラベルを作成するために使用しています機能は、私は私の機能走ったときに、空白のウィンドウが生成されるキャンバスに埋め込まれたフレームの内側の場所を使用する方法は?

def onFrameConfigure(canvas): 
    '''Reset the scroll region to encompass the inner frame''' 
    canvas.configure(scrollregion=canvas.bbox("all")) 

root = tk.Tk() 
root.geometry("400x400") 
canvas = tk.Canvas(root, borderwidth=0, background="#ffffff") 
frame = tk.Frame(canvas, background="#ffffff") 
vsb = tk.Scrollbar(root, orient="vertical", command=canvas.yview) 
canvas.configure(yscrollcommand=vsb.set) 

vsb.pack(side="right", fill="y") 
canvas.pack(side="left", fill="both", expand=True) 
canvas.create_window((4,4), window=frame, anchor="nw") 

frame.bind("<Configure>", lambda event, canvas=canvas: onFrameConfigure(canvas)) 

Tab(frame, 20) 

と一緒に次のコードを追加しようとしてきた

def Tab(root, y): 
    #Print the team 
    playerTeam = Label(root, bg = "white", text = "Hello") 
    playerTeam.config(height = 1, width = 13) 
    playerTeam.place(x=20,y=y) 

です。 しかし、.placeの代わりに.gridを使用すると、Tab()では正しく動作し、ラベルがウィンドウに表示されます。ただし、Tab()を複数回呼び出すと、ラベルがウィンドウから消えてしまい、スクロールする機能が使用できなくなります。

.place関数を正しく動作させるにはどうすればよいですか。 また、スクロールバーを正しく動作させるにはどうすればよいですか。 ありがとう

答えて

0

placeは、他のジオメトリマネージャと同様に機能しません。親のサイズは変更されません。したがって、フレームに大きな(ish)ラベルを配置しても、フレームはデフォルトサイズの1ピクセル幅と1ピクセル高のままです。そこには、あなたはそれを見ることができません。 official documentation for placeから

frame.configure(width=100, height=100, background="bisque") 

あなたは(あまりにも、それを視覚化するのに役立ちますし、独特の色を追加する)フレームに明示的な幅と高さを与えることによってこれを確認することができます

他の多くとは異なり、ジオメトリマネージャ(パッカーなど)が、 マスタの ウィンドウまたはスレーブウィンドウの親のジオメトリを操作しようとしません(つまり、要求されたサイズが に設定されていません)。 )。これらのウィンドウのサイズを制御するには、この目的のために の設定オプションを提供するフレームとキャンバスのようなウィンドウを作成します。

は、私は強くない使用placeになることをお勧めします。 Tkinterのpackgridジオメトリマネージャは、ウィジェットを配置する際に非常に優れています。 placeを使用する場合は、自分で数学を行う必要があります。その結果は、サイズを正しく調整したり、解像度やフォントサイズの変更に多大な労力を要しません。

+0

ブライアン、ありがとうございます。しかし、私は本当にグリッドを見て、ジオメトリマネージャーは私のインターフェイスデザインでうまく動作しています。しかし、それに加えて、なぜスクロールバーが私が与えた例ではうまくいかないでしょうか? –

+0

フレームが小さいので、 'scrollregion'が設定されていないため、スクロールバーは機能しません。 'scrollregion'をキャンバスよりも大きな値に設定すると、スクロールバーが機能します。ユーザーがウィジェットをインタラクティブに動かせるようにする設計を除いて、 'pack'や' grid'ではうまくいかないインタフェース設計はほとんどないと確信しています。 –

+0

ありがとうございました。私はパック/グリッドの方法を使用することができるだろうが、現時点では、ラベルがあまりにも緊密にセットされなくても、ラベルを得るのが難しいと感じた。 –

関連する問題