首页 > 解决方案 > 如何根据工作区大小将 tcl/tk 窗口居中?

问题描述

我试图将窗口放在桌面的中心。但我找不到如何找到工作区的高度/宽度的方法(即尊重任务栏或其他系统的区域)。

我的第一次尝试是:

wm withdraw $window
update idletasks

set width  [winfo reqwidth  $window]
set height [winfo reqheight $window]

set x [expr { ([winfo screenwidth $window] - $width) / 2}]
set y [expr { ([winfo screenheight $window] - $height) / 2}]

wm geometry $window ${width}x${height}+${x}+${y}
wm deiconify $window

但它不能正常工作,因为winfo screenwidth/height返回值基于屏幕分辨率,而不是桌面工作区。

我的另一个尝试来自https://stackoverflow.com/a/36387629/1980049

wm withdraw $window
update idletasks

set width  [winfo reqwidth  $window]
set height [winfo reqheight $window]

toplevel [set testWin ".__test_screen_size__[incr UID]"]
wm withdraw $testWin
wm state $testWin zoomed
update idletasks
set x [expr { ([winfo width $testWin] - $width) / 2 }]
set y [expr { ([winfo height $testWin] - $height) / 2 }]
destroy $testWin

wm geometry $window ${width}x${height}+${x}+${y}
wm deiconify $window

它按预期工作并获得了正确的 x/y 值。但是$testWin屏幕上的闪烁,所以这种方法也不适合。没有update idletasks它也行不通。

标签: tcltk

解决方案


我认为你可以使用:

winfo screenmmheight .

返回一个十进制字符串,给出窗口屏幕的高度,以毫米为单位。

winfo screenmmwidth .

返回一个十进制字符串,给出窗口屏幕的宽度,以毫米为单位。


推荐阅读