Почему метод geometry () работает с задержкой? - PullRequest
8 голосов
/ 20 января 2012

Если я запускаю этот код Python:

from Tkinter import *; w = Tk(); w.geometry( "640x480" ); print( w.geometry() )

Я получу вывод «1x1 + 0 + 0». Но если я запускаю интерпретатор и выполняю это как два отдельных команды, я получу совершенно другой вывод:

>>> from Tkinter import *; w = Tk(); w.geometry( "640x480" ) 
'' 
>>> w.geometry() 
'640x480+101+73'

Кажется, геометрия не применяется мгновенно, нужно что-то еще: (. Может быть, кто-нибудь знает, что мне нужно сделать, чтобы обновить геометрию на месте? Мне нужно, чтобы оно правильно центрировало / расположило главное и дочернее окна.

Ответы [ 2 ]

6 голосов
/ 20 января 2012

Вызов update_idletasks() в окне (или в виджете) приведет к обновлению его геометрии.

Вот небольшой фрагмент текста из ссылки на Tkinter:

Геометрияне точен, пока приложение не обновило свои незанятые задачи.В частности, все геометрии изначально равны «1x1 + 0 + 0», пока виджеты и менеджер геометрии не согласовали свои позиции.

0 голосов
/ 20 января 2012

Это завершает, но дает неправильный ответ:

from Tkinter import *; w = Tk(); w.geometry( "640x480" ); print "foo"; print( w.geometry() )

''
foo
1x1+0+0

Кажется, это зависает:

from Tkinter import *; w = Tk(); w.geometry( "640x480" );  print "foo"; print "foo"; print( w.geometry() )

Кажется, только прерывание клавиатуры выводит меня из себя.

Конечно, это, кажется, работает правильно:

from Tkinter import *; w = Tk(); w.geometry( "640x480" ); w.update_idletasks(); print( w.geometry() )

''
640x480+5+27
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...