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

问题描述 投票:0回答:1

我正在尝试在 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.

我做错了什么?

perl dialog tk-toolkit perltk
1个回答
4
投票

因为我在 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/
  2. 从“应用程序”文件夹启动 XQuartz。一旦运行,您应该会看到一个
    xterm
    窗口。这表明 X11 服务器处于活动状态。
  3. 从 macOS 终端运行脚本,但通过选中
    echo $DISPLAY
    确保您的显示已设置。它应该设置为类似
    :0
    .
© www.soinside.com 2019 - 2024. All rights reserved.