我正在编写一个脚本来输出一个窗口,其中包含一个Tkhtml小部件和一个在ttk :: panedwindow上方显示的文本小部件。两个小部件都可以垂直和水平滚动。还有一个按钮,允许用户清除文本小部件。
我在运行Ubuntu的笔记本电脑上进行一些开发。窗口管理器允许在2x2阵列中使用四个桌面工作区,并且在首次显示GUI时,从我正在使用的工作空间到下面的第五个左下方的第五个左下方。不得不围绕调整窗口大小以使其足够短以适应屏幕而烦恼,因此我想调整它的大小。
(我认为)我知道如何做到这一点,即绑定到一个适当的事件,以便我可以在首次显示窗口时运行脚本。 (重置脚本中的绑定,使其仅触发一次。)我认为“适当的事件”是<Map>
,但是当窗口首次映射时,两个小部件的高度为零(由{ {1}})。我尝试绑定到[winfo height]
,这似乎有用,(<Expose>
返回合理的数字,)所以:
当绑定触发时,[winfo height]
将几何图形报告为815x1029 + 49 + 24,[wm geometry]
将两个窗口小部件的两个高度报告为600和366,[winfo height]
返回高度800.我知道GUI中还有其他各种各样的部分,所以我并不感到惊讶,在初始布局中有63个像素未被计算。我假设在调整大小后我需要相同的空间,所以我应该要求815x737 + 49 + 24的几何体,但是当我这样做时,一条条子(大约是下部水平滚动条)仍然会流到下一个工作区。
通过手动扫描,我知道当一切都很好地适应屏幕时,几何应该是815x717 + 49 + 24,所以我在“其他位”允许的空间量上添加了20的软糖因子和GUI的各个部分“。这样做很好,但看起来有点不雅(大量的英国轻描淡写:-)),所以:
我在Ubuntu 12.04.5 LTS上使用Tk 8.6.1。我正在使用Compiz窗口管理器的0.9.7.12版本。
让我感到震惊的是,我应该找到各种窗格的高度,而不是Tkhtml和文本窗口小部件,因为它会占用滚动条和“清除”按钮。窗格高度最初是615和409,但这只是意味着我必须将我的软糖因子从20增加到78以使请求高度达到我想要的值717.有没有办法预测要求顶层的高度包含我的paned窗口,以便让那个顶层填满屏幕?
答案 0 :(得分:0)
我建议绑定到<Map>
。我会等待所有:paned窗口,主tkhtml窗口,文本窗口和要映射的滚动条,然后再尝试调整高度。
对于Linux,[winfo screenheight .]
不了解任何已配置的面板,因此您必须减去这些面板。您可以通过创建窗口,执行wm attributes . -zoomed 1
,然后获取窗口的几何图形来获得实际的屏幕高度。
标题栏和窗口边框占用空间。可以通过比较[winfo geometry .]
和[wm geometry .]
的输出来计算这些所需的空间。
还有panedwindow窗扇高度和任何边距和填充。
您可以通过从[winfo height .]
减去窗口窗高度来计算总数。
这是一种始终有效的方法,但是,它不是很有吸引力,因为用户会看到窗口在改变大小时闪烁。
wm attributes . -zoomed 1
)wm attributes . -zoomed 0
)