Button 如何在Windows上禁用Perl/Tk窗口关闭(';X';)按钮

Button 如何在Windows上禁用Perl/Tk窗口关闭(';X';)按钮,button,perltk,Button,Perltk,有没有办法禁用Perl/Tk窗口的关闭(“X”)按钮? 我知道如何使用所描述的技术忽略单击它,但我更愿意将其禁用 我在Windows上使用Perl/Tk 谢谢, splintor如果您在Unix环境中,那么您就不走运了。“关闭”按钮由桌面的窗口管理器管理,这是一个完全不同的过程,您无法控制 即使被黑客禁用了“关闭”按钮,用户也可以随时将其恢复 如果窗口管理器允许。例如,启蒙窗口管理器可以 根据需要启用/禁用所有窗口按钮 您在链接中提供的技术正是这样做的。它不会移除 “关闭”按钮。它只是给窗口管理

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

我在Windows上使用Perl/Tk

谢谢,

splintor

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

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

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

另请参见和页

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

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

$Mw->protocol('WM_DELETE_WINDOW',sub{return;});
根据,它看起来像是在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\u DELETE\u WINDOW'=>sub{}

如果你没有真正禁用关闭按钮(我的意思是将其灰显或从窗口装饰中移除),将窗口图标化而不是关闭它可能是最直观的做法。这就是我所做的


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

我认为,由于perl/TK是跨平台的(最低公分母),即使是在Windows中,您也需要进行一次严重的黑客攻击才能完成您想要的任务。