2

有没有办法禁用 Perl/Tk 窗口的关闭 ('X') 按钮?我知道如何使用此处描述的技术忽略单击它,但我更愿意禁用它。

我在 Windows 上使用 Perl/Tk。

谢谢,
刺客

4

4 回答 4

2

如果您在 Unix 环境中,那么您就不走运了。“关闭”按钮由Window Manager桌面管理,这是一个完全不同的过程,您无法控制。

即使您通过黑客禁用“关闭”按钮,如果窗口管理器允许,用户也可以随时将其恢复。例如,启蒙窗口管理器可以按需启用/禁用所有窗口按钮。

您在链接中提供的技术正是这样做的。它不会删除“关闭”按钮。它只是给窗口管理器 ( ) 一个提示WM_DELETE_WINDOW是否遵守此提示取决于窗口管理器。

另请参阅icccmNetWM页面。

你想要的可能在 Windows 上是可能的,但我对这个操作系统的经验是有限的,所以也许另一位海报会知道这一点。

于 2009-02-03T17:44:18.450 回答
2

我有一个我写的应用程序,我想知道同样的事情,我没有禁用它,但我有一个对子程序的回调,这只是return;

$Mw->protocol('WM_DELETE_WINDOW',sub{return;});
于 2011-06-30T18:34:48.327 回答
0

根据Perl Monks 的说法,它在 Windows 上看起来像以下工作:

#!/usr/bin/perl
use warnings;
use strict;
use Tk;

my $window = new MainWindow;
$window ->title("Close test");
$window ->geometry("400x250");

#prevents window from closing
$window->protocol('WM_DELETE_WINDOW' => sub {
                       print "Do stuff before exiting\n";
                       exit;
                   });

MainLoop;

在上面的代码中,您正在拦截用户按下“X”时发送的信号,然后可以编写自己的子程序以在按下按钮时执行。

如果你想禁用关闭图标,设置sub为空(有效地告诉它“按下时什么都不做”):'WM_DELETE_WINDOW' => sub {}

于 2016-06-22T21:38:53.873 回答
0

如果您没有设法真正禁用关闭按钮(我的意思是将其变灰甚至从窗口装饰中删除),那么将窗口图标化而不是关闭它可能是最直观的事情。这就是我所做的。

$window->protocol('WM_DELETE_WINDOW', sub { $window->iconify(); } );

于 2017-11-09T13:52:32.703 回答