2017-02-19 15 views
2

実際、私はtkinterウィンドウが必要な大きさであると考えました。残念ながら、それは私にとって真実ではありません(私はLubuntu 16.04を使用しています)。tkinterプログラムのウィンドウサイズ

私の質問: 以下の例を教えてもらえますか?私はtkinterの動作を理解していません。ここでは例


import tkinter as tk 

root = tk.Tk() 

menubar = tk.Menu(root) 

file_menu = tk.Menu(menubar) 

menubar.add_cascade(label="This is a very long string because it's just a test . . . ", menu=file_menu) 
file_menu.add_command(label="New", accelerator="Ctrl+N") 

root.config(menu=menubar) 
root.mainloop() 

スクリーンショット: ウィンドウが十分な大きさではありません。どうして?

enter image description here


(コンテナフレーム付き)もう一つの例:

import tkinter as tk 

root = tk.Tk() 

container = tk.Frame(root).pack() 

menubar = tk.Menu(container) 

file_menu = tk.Menu(menubar) 

menubar.add_cascade(label="This is a very long string because it's just a test . . . ", menu=file_menu) 
file_menu.add_command(label="New", accelerator="Ctrl+N") 

root.config(menu=menubar) 
root.mainloop() 

スクリーンショット:非常に、非常に小さいです!あなたは本当にそれを見ることはできません。しかし、なぜそうですか?

enter image description here

答えて

1

のTkのウィンドウサイズは、ウィンドウのジオメトリマネージャの関数です。トップレベルウィンドウの場合、ジオメトリマネージャは 'wm'です。これは、プラットフォームウィンドウマネージャによって管理されることを意味します。これは、アプリケーションウィンドウにサイズを問い合わせるか、またはデフォルトを設定します。メニューウィジェットはサイズを提供しないので、ジオメトリの計算には影響しません。したがって、内部で管理されているウィジェットがないので、デフォルトのトップレベルのサイズが得られます。

2番目のケースでは、デフォルトの高さと幅が0のサイズ・ディメンションのないフレームを作成しました。パック・ジオメトリ・マネージャをスレーブに使用するようにトップレベル・ウィジェットを設定します。これは、スレーブ(あなたのフレーム)に必要なスペースを求め、マスター(トップレベル)をそれらに含めるのに適したサイズに設定します。ここでは0です。フレームの幅と高さを設定すると、トップレベルはそれを含むように展開されます。

+0

問題は、メニューバーがウィンドウのサイズに無関係であるということですか? – Aliquis

+0

はい。メニューはトップレベルに関連付けられています。それは「内側」ではありません。 Tkのドキュメントには、これが(http://www.tcl.tk/man/tcl8.6/TkCmd/toplevel.htm#M11)、メニューが装飾の一部であり、ウィンドウ枠によって管理されていることが記載されています。 X11では少し違いますが、 'winfo_manager'は各ウィジェットの管理内容を教えてくれます。 – patthoyts

関連する問題