【发布时间】:2020-08-26 23:11:02
【问题描述】:
我想用 Perl 编写一些交互式 GUI。我用过 TclTk,但它看起来过时了。我已经为 C++ 编写了 QT 代码,但是 PerlTk 模块已经好几年没有发布了。谷歌搜索我看到了其他可能的选择。
对此有什么好的包,包括基本的窗口、菜单、画布、滚动条等等。
【问题讨论】:
标签: perl user-interface
我想用 Perl 编写一些交互式 GUI。我用过 TclTk,但它看起来过时了。我已经为 C++ 编写了 QT 代码,但是 PerlTk 模块已经好几年没有发布了。谷歌搜索我看到了其他可能的选择。
对此有什么好的包,包括基本的窗口、菜单、画布、滚动条等等。
【问题讨论】:
标签: perl user-interface
Gtk2 有glade2,它可以写出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;
【讨论】:
【讨论】:
呼应 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 主循环的应用程序中。
【讨论】:
WxPerl 的 GUI 构建器是 wxGlade 或 wxFormBuilder,两者都是开源的。
【讨论】:
我可能会使用 Gtk2,但 Tk 绝对没有死。缺乏发布是由于多年来一直在解决的错误。很多人仍在使用它,并且通常可以正常工作。 (Tk 的事件循环有点傻,但这是一个你可能不应该关心的细节。)唯一的缺点是你的 GUI 看起来像是 1996 年的,但谁在乎呢?
(git 附带的gitk 工具表明,只要有用,Tk GUI 看起来就很好。)
【讨论】:
最近我了解到另一个用于 Perl 的 GUI 工具包,名为 Prima。它之所以出名是因为它是用 C 语言编写的,特别是为 Perl 编写的,而不是来自 TCL 的端口或与其他东西的绑定。假设您的系统上有一些相当标准的库,它将直接从 CPAN 及其跨平台安装!
David Mertens 一直在使用它为 PDL 写一个新的 plotting library,还有一个 REPL!
【讨论】:
关于小部件的质量,所有三个 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 和 rubyqt4 的情况下不存在,因为它们都可以在 gnome 下使用 qt4 运行时运行良好。
因此,通过这种方式,九个选项中有八个(加上三个 tk)表现良好(我还没有测试 PySide)。
就 perl-tk 而言,widget 开发和建立得很好,与 tkinter、pmw 和 rubytk 不同,它的文档是上述所有这些中最好的。
但也许一段时间后,所有文档都已开发完成,并且任何文档都会变得同样好。
在考虑了速度、清晰度和跨平台之间的平衡后,选择 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 的情况下,即使在这方面也是一样的)。
【讨论】:
我无法为您提供真正的答案,但您通常必须考虑您的部署目标。一些 GUI 库非常好,但前提是您可以让它们在您的操作系统上工作。我不一定认为所有框架都需要跨平台兼容,这是一个在完美世界中努力实现的非常值得称赞的目标,只要您选择的框架不会因为基础而锁定您的大部分用户GUI 库很难在特定平台上安装或支持。
【讨论】:
我只是想让每个人都知道 PerlQt 很棒,而且这个网站有很多关于如何使用它的教程和很多示例可供下载。
PerlQt 是一种使用 Qt 拖放表单设计器和 Perl 创建美观的 GUI 程序的非常快速和简单的方法。 PerlQt 对于高级开发人员来说足够强大,对于初学者来说也很容易。
【讨论】:
我要使用的解决方案是 Gtk-Perl。一开始安装有困难,最后发现CamelboxPerl+Gtk2在一个包里。
【讨论】:
我使用过Tk,但最近几天我一直在玩Continuity (CPAN entry),一个有状态(每个用户的持久状态)Web 应用程序/服务器,它很容易成为一个一种将“GUI”功能添加到应用程序中的方法,同时使其具有多用户和可移植性。
编辑:在我写这篇文章的时候,我最感兴趣的是 Continuity 有自己的内置网络服务器。现在对于 Perl 的其他 web 框架也是如此。我一直在使用Mojolicious,虽然我也听说过关于Dancer 的好消息。
【讨论】: