Я пытаюсь разместить окно в центре моего рабочего стола.Но я не мог найти способ, как найти высоту / ширину рабочей области (т.е. уважать панель задач или другие области системы).
Моя первая попытка была:
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
Работает как положено и правильнозначения х / у были получены.Но на экране моргнул $testWin
, поэтому этот метод также не подходит.Без update idletasks
это тоже не сработает.