我试图将窗口置于桌面中央。但是我找不到找到工作区域的高度/宽度的方法(即尊重任务栏或其他系统的区域)。
我的第一次尝试是:
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
,它也不会起作用。
答案 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上测试