2017-02-19 8 views
2

실제로, 나는 tkinter 창이 필요로하는만큼 클 것으로 생각했다. 불행히도, 그것은 나를 위해 사실이 아닙니다 (저는 Lubuntu 16.04를 사용합니다).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의 창 크기는 윈도우의 형상 관리자의 함수이다. 최상위 창에서 geometry manager는 'wm'으로 플랫폼 창 관리자가 관리합니다. 응용 프로그램 창에 크기를 묻거나 기본값을 설정합니다. 메뉴 위젯은 크기를 제공하지 않으므로 지오메트리 계산에 영향을 미치지 않습니다. 따라서 내부에서 관리되는 위젯이 없으므로 기본 최상위 크기를 얻게됩니다.

두 번째 경우에는 너비와 높이가 0 인 크기 치수가없는 프레임을 만들었습니다.이 팩을 사용하면 최상위 wdget을 설정하여 해당 슬레이브에 대해 pack geometry manager를 사용할 수 있습니다. 이것은 슬레이브 (프레임)에게 필요한 공간을 요청하고 마스터 (최상위 레벨)를 포함하기에 적합한 크기로 설정합니다. 여기서는 0입니다. 프레임의 너비와 높이를 설정하면 최상위 레벨이 확장되어 프레임을 포함하게됩니다.

+0

문제는 메뉴 모음이 창 크기와 관련이 없다는 것입니다. – Aliquis

+0

예. 메뉴는 최상위와 연관되어 있습니다. 그것은 '내부'가 아닙니다. Tk 문서는 메뉴 (http://www.tcl.tk/man/tcl8.6/TkCmd/toplevel.htm#M11)가 메뉴를 장식하고 창틀에 의해 관리된다는 것을 지적하고있다. X11에서는 조금 다르지만'winfo_manager'는 각 위젯을 관리하는 것을 알려줍니다. – patthoyts