为什么“geometry()”方法会延迟工作?

时间:2012-01-19 22:29:26

标签: python tkinter

如果我运行这个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 个答案:

答案 0 :(得分:6)

在窗口(或窗口小部件)上调用update_idletasks()将强制其几何体更新。

以下是Tkinter参考文献中的一小段文字摘录:

  

在应用程序更新其空闲任务之前,几何图形不准确。特别是,在窗口小部件和几何管理器协商其位置之前,所有几何都是“1x1 + 0 + 0”。

答案 1 :(得分:0)

这样就完成了,但给出了错误的答案:

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