我正在尝试在 Perl 中使用简单的 Tk Yes/No 对话框。我有以下基于metacpan 示例的脚本:
#!/usr/bin/perl
use strict;
use warnings;
use Tk::Dialog;
my $mw->Dialog->new();
my $dialog = $mw->Dialog(-text => 'Save file?',
-bitmap => 'question',
-title => 'Save File Dialog',
-default_button => 'Yes',
-buttons => [qw/Yes No Cancel/]);
print "$dialog\n";
当我运行它时,它会抛出以下错误:
Can't call method "Dialog" on an undefined value at script.pl line N.
我做错了什么?
因为我在 macOS 上,所以我必须跳几圈才能让这个东西运行,但基本上你遇到的错误是因为你尝试实例化 Dialog 对象的方式。
您使用的
$mw->Dialog->new()
语法不正确。
您需要首先使用
MainWindow->new
创建主窗口,然后使用它来创建 Dialog 对象。
这应该有效:
#!/urs/bin/perl
use strict;
use warnings;
use Tk;
use Tk::Dialog;
my $mw = MainWindow->new(); # Create main window first
# Create the Dialog
my $dialog = $mw->Dialog(-text => 'Save file?',
-bitmap => 'question',
-title => 'Save File Dialog',
-default_button => 'Yes',
-buttons => [qw/Yes No Cancel/]);
my $answer = $dialog->Show();
print "$answer\n";
MainLoop();
确保您的 x11 服务器正在运行。
我必须看到这个:
编辑:如何在 macOS 上运行脚本?
xterm
窗口。这表明 X11 服务器处于活动状态。echo $DISPLAY
确保您的显示已设置。它应该设置为类似 :0
.