【问题标题】:What are good interactive GUI builder packages for Perl?Perl 有哪些好的交互式 GUI 构建器包?
【发布时间】:2020-08-26 23:11:02
【问题描述】:

我想用 Perl 编写一些交互式 GUI。我用过 TclTk,但它看起来过时了。我已经为 C++ 编写了 QT 代码,但是 PerlTk 模块已经好几年没有发布了。谷歌搜索我看到了其他可能的选择。

对此有什么好的包,包括基本的窗口、菜单、画布、滚动条等等。

【问题讨论】:

    标签: perl user-interface


    【解决方案1】:

    Gtk2glade2,它可以写出Gtk2::GladeXML 可以使用的XML 文件。这是同一文件中的example of how to bundle the XML with the app

    我起初误读了这个问题。我以为你想要一个用于制作 GUI 的 GUI 编辑器(这就是 glade2)。您也可以使用 Gtk2 而不使用 glade2 创建 GUI:

    #!/usr/bin/perl
    
    use strict;
    use warnings;
    use Gtk2;
    
    Gtk2->init;
    
    my $window = Gtk2::Window->new;
    my $vbox   = Gtk2::VBox->new;
    my $label  = Gtk2::Label->new("Hello World");
    my $button = Gtk2::Button->new("Press me");
    
    $window->add($vbox);
    $vbox->add($label);
    $vbox->add($button);
    
    $window->set_default_size(200, 200);
    $window->signal_connect(
        destroy => sub {
            Gtk2->main_quit;
        }
    );
    
    my $i = 0;
    $button->signal_connect(
        clicked => sub {
            $label->set_text("button pressed " . ++$i . " times");
        }
    );
    
    $window->show_all;
    
    Gtk2->main;
    

    【讨论】:

    • 如果你需要一个带有这个 Gnome2::Canvas 的画布是重量级分析器,而 Goo::Canvas 没有 gnome 依赖项。
    【解决方案2】:

    试试wxPerl

    来自网站:

    wxPerl 是一个扩展模块,允许 GUI的创建(图形用户 接口)来自 Perl;它是作为一个 很棒的 wxWidgets C++ 的包装器 GUI 工具包。

    【讨论】:

    • un-awesome,Alien::Wx 太可怕了,不支持文件句柄事件是一个交易破坏者。
    • Thate 也是 wxPerl - wxGlade 的 GUI 构建器。 Wx 工具包的优势还在于它在 Windows 上具有原生外观。
    【解决方案3】:

    呼应 Chas Owens,glade 在 Perl 中非常适用于 Gtk2。此外,Gtk2 还支持 GtkBuilder 文件(你也可以创建最新的 glade)。

    wxPerl(和 wxWidgets 本身)的主要问题是它不允许您将文件事件观察器安装到其主循环中(它只有 GUI、Socket 和 Timer 事件),这与 Tk 和 Gtk 不同。

    Qt、Tk 和 Gtk2 事件循环可以在 Perl 中与 AnyEvent 一起使用,并且 Gtk2 可以连接到运行带有 Glib::Event 和 Glib::EV 模块的 Event 或 Ev 主循环的应用程序中。

    【讨论】:

    • 并且POE可以和AnyEvent一起使用,只是POE在内存使用和性能方面很糟糕。
    • 真的吗? s/perl/Perl/?我指的是二进制文件。
    【解决方案4】:

    WxPerl 的 GUI 构建器是 wxGladewxFormBuilder,两者都是开源的。

    【讨论】:

      【解决方案5】:

      我可能会使用 Gtk2,但 Tk 绝对没有死。缺乏发布是由于多年来一直在解决的错误。很多人仍在使用它,并且通常可以正常工作。 (Tk 的事件循环有点傻,但这是一个你可能不应该关心的细节。)唯一的缺点是你的 GUI 看起来像是 1996 年的,但谁在乎呢?

      (git 附带的gitk 工具表明,只要有用,Tk GUI 看起来就很好。)

      【讨论】:

      • gitk 工具显示了为什么没有人应该再使用 Tk,我认为 - 回答反问 - 几乎每个人都关心。
      • 你觉得 gitk 看起来不错?哦,等等,你在 8 英寸的屏幕上使用 linux。 :)
      • 我的意思是您可以随心所欲地抱怨 GUI 背景的颜色,事实是您仍然可以轻松高效地完成工作。这意味着 Tk 是丑陋的,而不是死的。
      【解决方案6】:

      最近我了解到另一个用于 Perl 的 GUI 工具包,名为 Prima。它之所以出名是因为它是用 C 语言编写的,特别是为 Perl 编写的,而不是来自 TCL 的端口或与其他东西的绑定。假设您的系统上有一些相当标准的库,它将直接从 CPAN 及其跨平台安装!

      David Mertens 一直在使用它为 PDL 写一个新的 plotting library,还有一个 REPL

      【讨论】:

        【解决方案7】:

        关于小部件的质量,所有三个 gtk2、wx 和 qt4 都一样好——gtk2 最快,qt4 具有最佳分辨率,而 wx 就两个参数而言介于两者之间。

        但是 tk 在速度和分辨率方面都落后于这三者,但首先因为它是所有基于 unix 的解释语言的原始小部件,其次因为它是 freebsd 的原生小部件。

        与今天的 perl 一样,perl-gtk2 的文档比 perl-qt4 稍微发达一些,而 perl-qt4 又比 wxperl 更发达。事实上,如果你浏览网页,你会发现 perl-gtk2 的教程甚至比 pygtk(也非常成熟)和 ruby​​-gtk2 更广泛。对于 python,wxpython 文档领先于 PyQt 和 pygtk,而对于 ruby​​,ruby-qt4 领先于 ruby​​-gtk2 和 wxruby。然而,其他的开发速度非常快(例如 ruby​​-gtk2),一段时间后所有九个将在所有方面都相同。

        perl-qt4 的具体问题是:在非 kde 桌面的情况下,perl-qt4 可能无法运行。我尝试在 ubuntu 和 sabayon 中运行所有程序,发现 perl-gtk2 甚至 wxperl(以及 wxruby 也)运行良好,而我什至无法在 gnome-desktop 中运行单个 perl-qt4 程序,我已经安装了完整的 qt4 支持没有kde。

        perl-qt4 不仅要求安装 qt4 库,还要求安装 kde-desktop 库。这个问题是 perl-qt4 特有的,在 PyQt 和 ruby​​qt4 的情况下不存在,因为它们都可以在 gnome 下使用 qt4 运行时运行良好。

        因此,通过这种方式,九个选项中有八个(加上三个 tk)表现良好(我还没有测试 PySide)。

        就 perl-tk 而言,widget 开发和建立得很好,与 tkinter、pmw 和 ruby​​tk 不同,它的文档是上述所有这些中最好的。

        但也许一段时间后,所有文档都已开发完成,并且任何文档都会变得同样好。

        在考虑了速度、清晰度和跨平台之间的平衡后,选择 perl-gtk2、perl-qt4 或 wxperl。

        perl-tk、perl-gtk2 和 perl-qt4 语法与 perl 编程语言语法很好地配合,而 wxperl 语法看起来更像是正确的 c++ 混合到 perl 中,这与各自的语言语法不同(就像 wxpython 的情况一样和 wxruby)。

        但是如果您已经记住 wx 代码是独一无二的,那么您可以直接从 wxperl 开始。

        否则,最好的出路是:从 perl-tk 开始,然后切换到 perl-gtk2,然后切换到 perl-qt4 或 wxperl 等,但请确保您学习所有四个而不是只学习一个(相同的顺序也应该适用于python 和 ruby​​ 也是如此,尽管文档支持是反向的,但在 perl 的情况下,即使在这方面也是一样的)。

        【讨论】:

          【解决方案8】:

          我无法为您提供真正的答案,但您通常必须考虑您的部署目标。一些 GUI 库非常好,但前提是您可以让它们在您的操作系统上工作。我不一定认为所有框架都需要跨平台兼容,这是一个在完美世界中努力实现的非常值得称赞的目标,只要您选择的框架不会因为基础而锁定您的大部分用户GUI 库很难在特定平台上安装或支持。

          【讨论】:

          • Wx、Tk 和 Gtk2 都是跨平台的,三个 Tk 中最容易上手,其次是 Wx,其次是 Gtk2。根据我的经验,编码的难易程度是相反的。
          • Wx 很难在那里工作 Alien::Wx 不能在 tarball 中工作(主要是带有 sharedlibrary.so.number.number 的操作系统,而不是 sharedlibrary.so),这很奇怪,因为很少有其他使用 perl 模块的库有这个问题。
          • Gtk2 只是在这个词没有意义的意义上是跨平台的。你要么必须使用某人的二进制包,它预先假设了你的设置,要么尝试自己编译并放弃。
          【解决方案9】:

          我只是想让每个人都知道 PerlQt 很棒,而且这个网站有很多关于如何使用它的教程和很多示例可供下载。

          PerlQt Wiki tutorial

          PerlQt 是一种使用 Qt 拖放表单设计器和 Perl 创建美观的 GUI 程序的非常快速和简单的方法。 PerlQt 对于高级开发人员来说足够强大,对于初学者来说也很容易。

          【讨论】:

            【解决方案10】:

            我要使用的解决方案是 Gtk-Perl。一开始安装有困难,最后发现CamelboxPerl+Gtk2在一个包里。

            【讨论】:

              【解决方案11】:

              我使用过Tk,但最近几天我一直在玩Continuity (CPAN entry),一个有状态(每个用户的持久状态)Web 应用程序/服务器,它很容易成为一个一种将“GUI”功能添加到应用程序中的方法,同时使其具有多用户和可移植性。

              编辑:在我写这篇文章的时候,我最感兴趣的是 Continuity 有自己的内置网络服务器。现在对于 Perl 的其他 web 框架也是如此。我一直在使用Mojolicious,虽然我也听说过关于Dancer 的好消息。

              【讨论】:

                猜你喜欢
                • 2010-11-30
                • 1970-01-01
                • 1970-01-01
                • 2023-04-02
                • 2011-11-25
                • 2010-10-02
                • 1970-01-01
                • 2011-05-04
                • 1970-01-01
                相关资源
                最近更新 更多