0

トップフレームの 3 つのラベルすべての間隔を均等にしようとしています。「見えない」ラベルの幅をハードコーディングしてそれらを分離したくありません。これは、下のフレームで後でウィンドウ サイズを拡大する必要がある場合があるためです。現在、左のラベルが残っていて、どのラベルにも属していないように見える巨大な灰色の領域があり、最後に中央と右のラベルが右側で砕かれています。これを行うより良い方法はありますか?

from tkinter import *
from tkinter import ttk

#Build buttons    
def create_buttons():
    for y in range(6):
        for x in range(6):
            ttk.Button(bot_frame, width = 5, text = str(x) + "," + str(y)).grid(column = x, row = y, sticky = W)

root = Tk()

#top frame
top_frame = ttk.Frame(root, padding = "4 4 4 4")
top_frame.grid(column = 0, row = 0, sticky = (N, E, S, W))
top_frame.columnconfigure(0, weight = 1)
top_frame.rowconfigure(0, weight = 1)
top_frame['borderwidth'] = 2
top_frame['relief'] = 'sunken'

#bottom frame
bot_frame = ttk.Frame(root, padding = "4 4 4 4")
bot_frame.grid(column = 0, row = 2, sticky = (N, E, S, W))
bot_frame.columnconfigure(0, weight = 1)
bot_frame.rowconfigure(0, weight = 1)
bot_frame['borderwidth'] = 2
bot_frame['relief'] = 'sunken'

#Top labels
left_lbl = ttk.Label(top_frame, background = 'black', foreground = 'green', width = 5, text = "left").grid(column = 0, row = 0, sticky = (N, W))
center_lbl = ttk.Label(top_frame, background = 'red', width = 6, text = 'center').grid(column = 1, row = 0, sticky = (N, E, S, W))
right_lbl = ttk.Label(top_frame, background = 'black', foreground = 'green', width = 5, text = "right").grid(column = 2, row = 0, sticky = (N, E))

create_buttons()

root.mainloop()
4

1 に答える 1

0

最も簡単な解決策は、上部フレームの 3 つの列すべてに同じ重みを与えることです。つまり、それぞれが同じ量の余分なスペースを埋めます。質問に書かれているように、最初の列は余分な水平スペースをすべて占めるように定義されています。

これをクロスプラットフォームで機能させたい場合は、ttk ラベル ウィジェットではなく tkinter ラベル ウィジェットを使用することもできます。たとえば、Mac では、ttk ウィジェットの背景は無視されます。

私にとっては、ウィジェットを 1 行または 1 列に配置すると、そのパックが最適に機能することがわかりました。ただし、私が提案する変更を行うと、グリッドも正常に機能します。

グリッドは、グリッド内に物事をレイアウトするのに非常に優れていることは明らかですが、ウィンドウのサイズが変わったときにすべてが正しく機能するようにするには、行と列に重みを割り当てるという追加の手順を実行する必要があることを意味します.

于 2013-07-13T02:24:02.023 に答える