如何为是/否用户输入创建 Tk::Dialog?

ske*_*tax 2 perl dialog tk-toolkit perltk

我正在尝试在 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";
Run Code Online (Sandbox Code Playgroud)

当我运行它时,它会抛出以下错误:

Can't call method "Dialog" on an undefined value at script.pl line N.
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

bad*_*ker 5

因为我在 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();
Run Code Online (Sandbox Code Playgroud)

确保您的 x11 服务器正在运行。

我必须看到这个:

在此输入图像描述

编辑:如何在 macOS 上运行脚本?

  1. 安装https://www.xquartz.org/
  2. 从应用程序文件夹启动 XQuartz。一旦运行,您应该会看到一个xterm窗口。这表明 X11 服务器处于活动状态。
  3. 从 macOS 终端运行脚本,但请确保通过选中 来设置您的显示echo $DISPLAY。它应该设置为类似的值:0