首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Perl Tkx下重新定位主窗口?

如何在Perl Tkx下重新定位主窗口?
EN

Stack Overflow用户
提问于 2009-07-31 12:21:31
回答 1查看 2K关注 0票数 1

在或多或少地将许多旧的Tk脚本转换为Tkx之后,我被以下函数的一个端口卡住了,该函数重新定位作为参数传入屏幕中心的窗口。我过去常常在调用MainLoop之前调用它,在这个时候Tk显然已经决定了reqwidth和reqheight的值。

代码语言:javascript
复制
sub CenterWindow
{
    # Args: (0) window to center
    # (1) [optional] desired width
    # (2) [optional] desired height

    my($window, $width, $height) = @_;

    $window->idletasks;
    $width = $window->reqwidth unless $width;
    $height = $window->reqheight unless $height;

    my $x = int(($window->screenwidth / 2) - ($width / 2));
    my $y = int(($window->screenheight / 2) - ($height / 2));

    $window->geometry($width . "x" . $height . "+" . $x . "+" . $y);
}

如果有必要,idletasks可以改为Tkx::update(),但我不知道如何为这个旧的Tk例程的窗口特定部分找到任何明显的翻译。Tkx似乎没有可通过cget()检索的reqwidth、reqheight、screenwidth或screenheight的等价物。

我现在在Tkx中使用网格布局,而不是在Tk中使用pack布局,这一事实有什么关系吗?

顺便说一句,如果有什么不同的话,我在Windows Vista上运行的是ActivePerl 5.10。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-08-07 01:44:12

几何管理器并不重要;它只控制小部件在框架中的布局方式。您需要的数据可以通过winfo命令获得:

代码语言:javascript
复制
sub CenterWindow {
    # Args: (0) window to center
    # (1) [optional] desired width
    # (2) [optional] desired height

    my ($window, $width, $height) = @_;

    Tkx::update('idletasks');
    $width  ||= Tkx::winfo('reqwidth',  $window);
    $height ||= Tkx::winfo('reqheight', $window);

    my $x = int((Tkx::winfo('screenwidth',  $window) / 2) - ($width / 2));
    my $y = int((Tkx::winfo('screenheight', $window) / 2) - ($height / 2));

    $window->g_wm_geometry($width . "x" . $height . "+" . $x . "+" . $y);
}

据我所知,你必须直接调用winfo,你不能使用OO语法。

您可能已经了解了这一点,但是当使用Tkx进行开发时,您需要参考Tcl Tk documentationTkx文档只是描述了(非常薄的)转换层是如何工作的。此外,usenet组comp.lang.perl.tk (或到它的ptk mailing list桥)可能是Tkx问题的最佳资源,因为至少可以在那里找到Tkx背后的一个ActiveState家伙。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1212246

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档