【问题标题】:Is there a tool like PySimpleGUI for Perl?是否有类似 PySimpleGUI for Perl 的工具?
【发布时间】:2019-12-25 20:20:11
【问题描述】:

我正在寻找一个像PySimpleGUI 一样简单的Perl GUI 工具。 PySimpleGUI 声称是这样的好选择:

  • 将简单 GUI 的便利性添加到 CLI Perl 脚本中。
  • 分享一些我从终端运行的很酷的 Perl 工具,但为(内部)用户提供了一个简单的 GUI
  • 与朋友或家人(不太熟悉 CLI)分享我的 Perl 程序
  • 在系统托盘中运行程序(可能)
  • 寻找“受支持”且不断开发和改进的 GUI 包
  • 良好的文档和示例

这些是我的要求,因为 PySimpleGUI 提供了所有这些,所以我尝试了一个项目。我喜欢它。这促使我们尝试为 Perl 寻找类似的东西。

我在带有 KDE 的 Linux 上运行 perl 5,版本 30。

目前我只发现:

我无法让示例运行,并且提供的文档不符合我的要求。 (我将在一个单独的问题中询问我与 GUIDeFATE 的具体问题,但 GUIDeFATE 不像 PySimpleGUI 那样积极开发。)

我过去曾在 bash 脚本中使用过 Kdialog,但这不是我的想法。

是否有对应于 Perl 的 PySimpleGUI?

【问题讨论】:

    标签: perl user-interface sh


    【解决方案1】:

    我在 Perl 中找不到像 PySimpleGUI 这样的东西。我认为您需要基于工具包的完整 api 构建 gui(而不是像 PySimpleGUI 这样的 api 的简化版本)。我知道Gtk3Tk 工具包被积极使用。还有 WxQtCore4 工具包,但在我看来,这些工具包使用较少且没有积极维护。

    这是Gtk3中的一个例子:

    use feature qw(say);
    use strict;
    use warnings;
    use Gtk3 -init;
    
    my $window = Gtk3::Window->new( 'toplevel' );
    $window->signal_connect( destroy  => sub { Gtk3->main_quit() } );
    my $grid = Gtk3::Grid->new();
    $window->add( $grid );
    my $label1 = Gtk3::Label->new('Some text on Row 1');
    $grid->attach($label1, 0,0,1,1);
    my $label2 = Gtk3::Label->new('Enter something on Row 2');
    $grid->attach($label2, 0,1,1,1);
    my $entry = Gtk3::Entry->new();
    $grid->attach($entry, 1,1,1,1);
    my $button1 = Gtk3::Button->new('Ok');
    $button1->signal_connect('clicked' => sub { say "You entered ", $entry->get_text( ) } );
    $grid->attach($button1, 0,2,1,1);
    my $button2 = Gtk3::Button->new('Cancel');
    $button2->signal_connect('clicked' => sub { $window->destroy() } );
    $grid->attach($button2, 1,2,1,1);
    $window->set_position('center_always');
    $window->show_all();
    Gtk3->main();
    

    【讨论】:

      【解决方案2】:

      这是 Håkon 使用 Tk 的示例

      use feature qw(say);
      use strict;
      use warnings;
      use Tk;
      my $text= '';
      my $window = tkinit();
      $window->Label(-text =>'Some text on Row 1')->grid();
      $window->Label(-text=>'Enter something on Row 2',
                 )->grid(
          $window->Entry(-textvariable=> \$text)
      );
      $window->Button(-text=>'Ok',
                      -command=>sub{say "You entered $text"},
                  )->grid(
          $window->Button(-text=>'Cancel',-command=>sub{Tk::exit})
      );
      $window->withdraw;
      $window->Popup;
      MainLoop;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-30
        • 1970-01-01
        • 1970-01-01
        • 2015-05-23
        • 1970-01-01
        相关资源
        最近更新 更多