如何根据工作区大小将tcl / tk窗口居中?

时间:2018-12-02 21:26:13

标签: 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,它也不会起作用。

2 个答案:

答案 0 :(得分:0)

我认为您可以使用:

winfo screenmmheight .

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

winfo screenmmwidth .

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

答案 1 :(得分:0)

package require Tk

set window_1_width 350 ;    set window_1_height 250

set x_1 [ expr {([ winfo vrootwidth  . ] - $window_1_width ) / 2 }]
set y_1 [ expr {([ winfo vrootheight . ] - $window_1_height ) / 2 }]
wm geometry . ${window_1_width}x${window_1_height}+$x_1+$y_1

在Windows 7 tcl / tk 8.6上测试