2012-05-04 22 views
15

私の理解では、__init__方法ですべてのフレームやウィジェットを初期化した後、Tkinterのウィンドウはこれらすべてのコンポーネントに合わせてサイズを変更していることです。tkinterで最小ウィンドウサイズを設定するにはどうすればよいですか?

私はその最小サイズになるように、ウィンドウの初期化サイズを設定したいと思います。ウィンドウを最大化して拡大縮小したいと思っていますが、ウインドウを小さくしてウィジェットを隠すことはできません。

どうすればよいですか?

+0

ウィンドウを小さくしないようにユーザーを制限したいのですか?文字通り、多くのウィジェットが切り刻まれてしまっているのですか、それともレイアウトの問題なのでしょうか(つまり、ウィジェットが縮小してしまうのではなくスクロールバーが消えてしまいます)。 –

答えて

27

をあなたはまた、このようなものを使用することによって、あなたのメインループを入力せずにすぐに更新を強制することができますeffbotのtkinterbookでupdate()

root = Tk() 
# set up widgets here, do your grid/pack/place 
# root.geometry() will return '1x1+0+0' here 
root.update() 
# now root.geometry() returns valid size/placement 
root.minsize(root.winfo_width(), root.winfo_height()) 

説明:

プロセスのすべての保留中のイベント、あらゆるを完了し、イベントコールバックを呼び出します保留中のジオメトリ管理は、必要に応じてウィジェットを再描画し、 保留中のすべてのアイドルタスクを呼び出します。 (イベントコールバック内から、例えば、または任意の方法でイベントから呼び出すことができる機能 から間違った 場所から呼び出された場合、それ は本当に厄介な競合状態につながる可能性があるため、この方法では、注意して使用する必要がありますコールバックなど)。 が疑わしい場合は、代わりにupdate_idletasksを使用してください。

私はこれを使いましたが、メインループにジャンプする前に、ウィジェットのサイズや位置を取得する方法を見つけようとしていました。

+0

これは私の答えよりもはるかにクリーンです。ありがとう! –

+0

Hey JohnさんのPythonエキスパートhttp://stackoverflow.com/questions/23022005/python-tkinter-tree-selection –

2

私はそれを考え出した:

def __init__(self, master): 
    ... 
    self.master.update_idletasks() 
    self.master.after_idle(lambda: self.master.minsize(self.master.winfo_width(), self.master.winfo_height())) 
-3
root = Tk() 

ルートウィンドウが作成されているためです。ルートウィンドウは、プログラムのメインアプリケーションウィンドウです。タイトルバーと枠線があります。これらは、ウィンドウマネージャによって提供されます。他のウィジェットの前に作成する必要があります。

root.geometry("250x150+300+300") 

ジオメトリ()方法は、ウィンドウのサイズを設定し、画面上に配置します。最初の2つのパラメータはウィンドウの幅と高さです。最後の2つのパラメータはx、yのスクリーン座標です。

app = Example(root) 

ここでは、アプリケーションクラスのインスタンスを作成します。

root.mainloop() 

最後に、メインループを入力します。この時点からイベント処理が開始されます。メインループはウィンドウシステムからイベントを受け取り、アプリケーションウィジェットにディスパッチします。タイトルバーの閉じるボタンをクリックするか、quit()メソッドを呼び出すと終了します。

enter image description here

私はあなたが、これは重宝願っています。

+0

を参照してください。これは質問に全く答えないようです。あなたの答えは、ウィンドウの最小サイズを設定することと何が関係していますか? –

+0

フレームを最小または固定サイズにする単一の魔法の機能はありません。ただし、フレームに幅と高さを指定することで、フレームのサイズを強制することができます。 – miksiii

4

私はこの質問が古いですけど、ここでは別の方法があります:FOOFOOバーにウィンドウの最小サイズを設定します

root = Tk() 
root.minsize(foo, bar) 

root.minsize()バーはそれぞれウィンドウの幅と高さです。

あなたのメインループの前にこのコードを入れてください。

+0

あなたのメインループの前にそのコードを置かなければならないというのは当てはまりません。 –

関連する問題