何时以及如何使用Tk设置窗口大小

时间:2016-04-02 19:52:12

标签: tcl tk

我正在编写一个脚本来输出一个窗口,其中包含一个Tkhtml小部件和一个在ttk :: panedwindow上方显示的文本小部件。两个小部件都可以垂直和水平滚动。还有一个按钮,允许用户清除文本小部件。

我在运行Ubuntu的笔记本电脑上进行一些开发。窗口管理器允许在2x2阵列中使用四个桌面工作区,并且在首次显示GUI时,从我正在使用的工作空间到下面的第五个左下方的第五个左下方。不得不围绕调整窗口大小以使其足够短以适应屏幕而烦恼,因此我想调整它的大小。

(我认为)我知道如何做到这一点,即绑定到一个适当的事件,以便我可以在首次显示窗口时运行脚本。 (重置脚本中的绑定,使其仅触发一次。)我认为“适当的事件”是<Map>,但是当窗口首次映射时,两个小部件的高度为零(由{ {1}})。我尝试绑定到[winfo height],这似乎有用,(<Expose>返回合理的数字,)所以:

问题1:我应该绑定哪个事件?

当绑定触发时,[winfo height]将几何图形报告为815x1029 + 49 + 24,[wm geometry]将两个窗口小部件的两个高度报告为600和366,[winfo height]返回高度800.我知道GUI中还有其他各种各样的部分,所以我并不感到惊讶,在初始布局中有63个像素未被计算。我假设在调整大小后我需要相同的空间,所以我应该要求815x737 + 49 + 24的几何体,但是当我这样做时,一条条子(大约是下部水平滚动条)仍然会流到下一个工作区。

通过手动扫描,我知道当一切都很好地适应屏幕时,几何应该是815x717 + 49 + 24,所以我在“其他位”允许的空间量上添加了20的软糖因子和GUI的各个部分“。这样做很好,但看起来有点不雅(大量的英国轻描淡写:-)),所以:

问题2:我错过了什么,需要使用软糖因子?

我在Ubuntu 12.04.5 LTS上使用Tk 8.6.1。我正在使用Compiz窗口管理器的0.9.7.12版本。

更新

让我感到震惊的是,我应该找到各种窗格的高度,而不是Tkhtml和文本窗口小部件,因为它会占用滚动条和“清除”按钮。窗格高度最初是615和409,但这只是意味着我必须将我的软糖因子从20增加到78以使请求高度达到我想要的值717.有没有办法预测要求顶层的高度包含我的paned窗口,以便让那个顶层填满屏幕?

1 个答案:

答案 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
  • 获取窗口几何图形并替换屏幕高度 最大化的屏幕高度。
  • 设置窗口几何体。