31

Tkinterウィンドウのサイズは、次の方法で制御できます。

.minsize()
.maxsize()
.resizable()

Tkinterまたはttkフレームのサイズを制御する同等の方法はありますか?

@ブライアン:frame1.packコードを次のように変更しました。

frame1.pack(fill='both', expand=True)
frame1.bind( '<Configure>', maxsize )

そして、このイベントハンドラーを追加しました。

# attempt to prevent frame from growing past a certain size
def maxsize( event=None ):
    print frame1.winfo_width()
    if frame1.winfo_width() > 200:
        print 'frame1 wider than 200 pixels'
        frame1.pack_propagate(0)
        frame1.config( width=200 )
        return 'break'

上記のイベントハンドラーは、フレームの幅が大きすぎることを検出しましたが、サイズの増加を防ぐことはできません。これはTkinterの制限ですか、それとも私はあなたの説明を誤解しましたか?

4

2 に答える 2

31

フレームを最小サイズまたは固定サイズに強制する単一の魔法の機能はありません。ただし、フレームに幅と高さを指定することで、フレームのサイズを強制することができます。次に、さらに2つのことを行う必要があります。このウィンドウをコンテナに配置するときは、ジオメトリマネージャがウィンドウを縮小または拡大しないようにする必要があります。2つ目は、フレームが他のウィジェットのコンテナである場合は、グリッドまたはパックの伝播をオフにして、フレームがそれ自体のコンテンツに合わせて縮小または拡大しないようにします。

ただし、これによってウィンドウのサイズを内部フレームよりも小さくすることができなくなるわけではないことに注意してください。その場合、フレームはクリップされます。

import Tkinter as tk

root = tk.Tk()
frame1 = tk.Frame(root, width=100, height=100, background="bisque")
frame2 = tk.Frame(root, width=50, height = 50, background="#b22222")

frame1.pack(fill=None, expand=False)
frame2.place(relx=.5, rely=.5, anchor="c")

root.mainloop()
于 2010-12-09T14:55:15.180 に答える
6

回避策-少なくとも最小サイズの場合:stick ='nsew'を設定することにより、グリッドを使用してルートに含まれるフレームを管理し、グリッドサイズに従うようにすることができます。次に、root.grid_rowconfigureとroot.grid_columnconfigureを使用して、次のようにminsizeの値を設定できます。

from tkinter import Frame, Tk

class MyApp():
    def __init__(self):
        self.root = Tk()

        self.my_frame_red = Frame(self.root, bg='red')
        self.my_frame_red.grid(row=0, column=0, sticky='nsew')

        self.my_frame_blue = Frame(self.root, bg='blue')
        self.my_frame_blue.grid(row=0, column=1, sticky='nsew')

        self.root.grid_rowconfigure(0, minsize=200, weight=1)
        self.root.grid_columnconfigure(0, minsize=200, weight=1)
        self.root.grid_columnconfigure(1, weight=1)

        self.root.mainloop()

if __name__ == '__main__':
    app = MyApp()

しかし、ブライアンが書いたように(2010年:D)、最小サイズを制限しない限り、ウィンドウのサイズをフレームよりも小さくすることができます。

于 2020-01-09T11:53:33.090 に答える