perl 如何创建一个Tk::对话框用于是/否用户输入?

qco9c6ql  于 8个月前  发布在  Perl
关注(0)|答案(1)|浏览(84)

我试图在Perl中使用一个简单的Tk是/否对话框。我有以下基于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.

我做错了什么?

ljsrvy3e

ljsrvy3e1#

由于我在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上运行脚本?
1.安装https://www.xquartz.org/
1.从应用程序文件夹启动XQuartz。一旦它运行,您应该看到一个xterm窗口。这表明X11服务器处于活动状态。
1.从macOS终端运行该脚本,但请确保通过检查echo $DISPLAY设置了显示。它应该设置为类似:0的值。

相关问题