2

私はTKinterでかなり複雑なGUIを構築しているので、当然.grid関数を使用しています。

いくつかのウィジェットをフレームにグループ化して扱いやすくしましたが、何らかの理由で、フレーム内のウィジェットで.gridを使用すると、スティッキー属性が機能しないようです。ウィジェットがフレーム全体に表示されません。

例:

f3 = tk.Frame(self, borderwidth=1, relief="ridge")
f3.grid(row=0, column=0, sticky="NS")
tk.Label(f3, text="Site List").grid(in_=f3, row=0, column=0)
self.sitelist = tk.Listbox(f3)
self.sitelist.grid(in_=f3, row=1, column=0, sticky="NS")

上記のコードでは、フレームf3はルートウィジェットの0,0セルのスペースを埋めていますが、リストボックスは、スティッキーな「NS」を要求したにもかかわらず、フレームのすべてのスペースを埋めていません。

リストボックスをルートウィジェットの0,0に配置すると、リストボックスが引き伸ばされ、すべてのスペースが適切に埋められます。フレーム内にある場合は、正常に動作しません。

誰かがこれを回避する方法を説明できますか?

フレームを使うとレイアウトが簡単になると思いましたが、そうではありません!!!

乾杯。クリス

4

2 に答える 2

5

1つ以上の列と行に「重み」を与える必要があります。通常、重みが1の行と列が1つだけあります(デフォルトはゼロです)。ウェイトのある行または列は、含まれているウィジェットまたはウィンドウのサイズが変更されると拡大および縮小します。

複数の行または複数の列に重みがある場合、重みはそれらが拡張する割合を表します。たとえば、1つの列の重みが2で、別の列の重みが1の場合、2つの列は1の列の2倍に拡張されます。

grid_rowconfigureおよびgrid_columnconfigureオプションを使用して、含まれているウィジェットに重みを割り当てることができます。

f3.grid_rowconfigure(0, weight=1)
f3.grid_columnconfigure(0, weight=1)

重みの簡単な説明については、 tkdocs.comWebサイトのグリッドチュートリアルの「サイズ変更の処理」というタイトルのセクションを参照してください。

于 2012-11-15T18:16:50.687 に答える
1

まず第一に、インスタンス化すると同時にラベルをグリッド化するべきではありません。次に、Grid.rowconfigureを使用して行に「重み」を追加し、Grid.columnconfigureを使用して列に追加する必要があります。重みは拡張を制御し、グリッドがウィジェットを拡張できるようにするにはゼロ以外にする必要があります。コードに次の行を追加すると、機能するはずです。

Grid.columnconfigure(f3, 0, weight=1)
Grid.rowconfigure(f3, 0, weight=1)
Grid.rowconfigure(f3, 1, weight=1)

それが役に立てば幸い

于 2012-11-15T17:07:41.660 に答える