tcl - 如何根据工作区大小将 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
它也行不通。
解决方案
我认为你可以使用:
winfo screenmmheight .
返回一个十进制字符串,给出窗口屏幕的高度,以毫米为单位。
winfo screenmmwidth .
返回一个十进制字符串,给出窗口屏幕的宽度,以毫米为单位。
推荐阅读
- ios - 在启动画面 iOS Swift 4 中添加编码动画
- deployment - 取消选中敏感时 SSIS 清除加密密码
- prestashop-1.7 - 如何将 Prestashop 1.7.x 中的公司字段添加到创建帐户表单
- angular - 当页面被重定向时,我在 IE 的地址栏中得到默认的 Angular 图标
- max - 如何在 ag-grid 单元格上设置最大长度
- html - CSS 网格不显示
- alfresco - 如何防止 Alfresco 转换服务器应用程序停止:
- scala - 为什么 Scala 中的列表在内部是 LinkedList?
- java - spring.datasource.initialize 已弃用
- python - 在 Kivy 中实现计时器时遇到问题