Как выровнять окно tcl / tk относительно размера рабочей области? - PullRequest
0 голосов
/ 03 декабря 2018

Я пытаюсь разместить окно в центре моего рабочего стола.Но я не мог найти способ, как найти высоту / ширину рабочей области (т.е. уважать панель задач или другие области системы).

Моя первая попытка была:

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 это тоже не сработает.

1 Ответ

0 голосов
/ 03 декабря 2018

Я думаю, вы можете использовать:

winfo screenmmheight .

Возвращает десятичную строку с указанием высоты экрана в миллиметрах.

winfo screenmmwidth .

Возвращает десятичную строку с указанием ширины окнаэкран, в миллиметрах.

...