我想在Perl中编写一些交互式GUI。我使用过TclTk,但看起来过时了。我已经为C ++编写了QT代码,但是PerlTk模块在几年内还没有发布。谷歌搜索我看到其他可能的选择。
有什么好的软件包,包括基本窗口,菜单,绘图画布,滚动条等。
答案 0 :(得分:13)
Gtk2有glade2,可以写出Gtk2::GladeXML可用的XML文件。这是同一档案中的example of how to bundle the XML with the app。
我最初误解了这个问题。我以为你想要一个用于制作GUI的GUI编辑器(这就是glade2)。您还可以使用Gtk2创建GUI而不使用glade2:
#!/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;
答案 1 :(得分:11)
答案 2 :(得分:6)
回应Chas Owens,glade在Perl中与Gtk2非常相似。此外,Gtk2还支持GtkBuilder文件(您也可以创建最新的版本)。
wxPerl(和wxWidgets本身)的主要问题是,它不允许您将文件事件监视器安装到其主循环中(它只有GUI,Socket和Timer事件),这与Tk和Gtk不同。
Qt,Tk和Gtk2事件循环可以在Perl中与AnyEvent一起使用,并且Gtk2可以通过Glib :: Event和Glib :: EV模块连接到运行Event或Ev mainloop的应用程序中。
答案 3 :(得分:4)
WxPerl的GUI构建器将是wxGlade或wxFormBuilder,两者都是开源的。
答案 4 :(得分:4)
我可能会使用Gtk2,但Tk肯定没有死。缺乏发布是由于多年来出现了漏洞。很多人仍然使用它,它通常工作正常。 (Tk的事件循环有些愚蠢,但这是一个可能不应该关注你的细节。)唯一的缺点是你的GUI看起来像是从1996年开始,但谁在乎呢?
(git中包含的gitk
工具表明,只要它们有用,Tk GUI就会很好用。)
答案 5 :(得分:3)
最近我了解了另一个名为Prima的Perl GUI工具包。它声名鹊起的原因是它是用C语言编写的,特别是Perl,而不是来自TCL的端口或绑定到其他东西。假设您的系统上有一些相当标准的库,它将直接从CPAN及其跨平台安装!
David Mertens一直在使用plotting library为PDL编写一个新的REPL,还有一个{{3}}!
答案 6 :(得分:2)
关于小部件的质量,所有三个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和沙巴翁和发现的perl-GTK2甚至wxperl(也wxruby)运行正常,而我不能跑,我已经安装了完整的QT4支持GNOME桌面甚至一个Perl的QT4程序没有kde。
perl-qt4不仅要求安装qt4-libraries,还要求安装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的情况下即使对于这个方面它也是相同的。)
答案 7 :(得分:1)
我没有真正的答案,但通常你必须考虑你的部署目标。一些GUI库非常好,但前提是您可以让它们在您的操作系统上运行。我并不一定认为所有框架都需要跨平台兼容,这是一个非常值得称赞的目标,只有你所选择的那个并没有锁定你的大部分用户,因为这个基础是完美的。 GUI库很难在特定平台上安装或支持。
答案 8 :(得分:1)
我只想让每个人都知道PerlQt很棒,这个网站有很多关于如何使用它的教程以及许多下载示例。
PerlQt是一种使用Qt拖放表单设计器和Perl创建外观精美的GUI程序的快速简便方法。 PerlQt对于高级开发人员来说足够强大,也适合初学者。
答案 9 :(得分:0)
我要使用的解决方案是Gtk-Perl。起初我很难安装它,但最后我在一个软件包中找到了Camelbox Perl + Gtk2。
答案 10 :(得分:0)
我使用了Tk
,但在最近几天我一直在玩Continuity
(CPAN entry),一个有状态(每个用户的持久状态)Web应用程序/服务器,它可以很容易地将“GUI”功能添加到应用程序中,同时使其成为多用户和便携式。
编辑:在我写这篇文章时,我最感兴趣的是Continuity有自己的内置网络服务器。现在,Perl的其他web框架也是如此。我一直在使用Mojolicious,虽然我也听到了关于Dancer的好消息。