0

Tkinter を使用して Python GUI の基本的なレイアウトを作成しようとしています。

#!/usr/bin/env python
from Tkinter import *

#create root
root = Tk()

banner = Frame(root, width=500)
body = Frame(root, width=500)
banner.grid()
body.grid()


bannercontent = Label(banner, bg="Green", text="Green").grid(row=0, column=0)
bannerbuttons = Label(banner, bg="Red", text="Red").grid(row=0, column=1)
bodycontent = Label(body, bg="Blue", text="Blue").grid(row=1, column=0, columnspan=2, sticky=E+W)
root.mainloop()

ただし、上記では、青のラベルが 2 つの列を埋めるために拡張されていません。つまり、緑と赤の下のスペースを埋めています。私は何を間違っていますか?

例はこちら http://imgur.com/nGWQX9y

例

前もって感謝します

4

1 に答える 1

1

コードにいくつか問題があります。まず、stickyオプションを指定していないため、ウィジェットはセルの端に「固着」(つまり、拡大または縮小) しません。bodycontentラベルは実際には 2 列を占めていますが、フレーム自体はメイン ウィンドウの全幅に拡張されていません。

2 つ目の問題は、列がアプリ全体にまたがっていると想定しているように見えることです。彼らはしない。bannerウィジェットを列 0 と列 1 に配置したため、2 つの列があります。ただし、 bodycontent1 つの列しかありません (または、2 つあると言えますが、2 番目の列の幅はゼロです)。最初のフレームの列のサイズは、2 番目のフレームの列とは関係ありません。したがって、下のフレームの内容は上のフレームと一致しません。

コードの 3 つ目の問題は、行または列に「重み」を与えていないことです。このweight属性は、余分なスペースを割り当てる方法を Tkinter に指示します。それを行っていないため、ウィンドウを拡大または縮小しても、GUI のサイズが適切に変更されません。経験則として、任意のコンテナーについて、少なくとも 1 つの行と 1 つの列にゼロ以外の重みを指定する必要があります。

于 2013-04-23T19:15:38.963 に答える