2009-03-30 31 views
10

Tôi muốn viết một số GUI tương tác trong Perl. Tôi đã sử dụng TclTk nhưng nó có vẻ ngày. Tôi đã viết mã QT cho C++, nhưng mô-đun PerlTk chưa có bản phát hành trong vài năm. Googling xung quanh tôi thấy các tùy chọn khác có thể.Các gói trình xây dựng GUI tương tác tốt cho Perl là gì?

Các gói tốt cho việc này, bao gồm cửa sổ cơ bản, menu, canvas vẽ, thanh cuộn, v.v.

Trả lời

13

Gtk2glade2 có thể ghi ra tệp XML có thể sử dụng bởi Gtk2::GladeXML. Đây là một example of how to bundle the XML with the app trong cùng một tệp.

Tôi đã đọc câu hỏi lúc đầu. Tôi nghĩ rằng bạn muốn có một trình soạn thảo GUI để làm GUI (đó là những gì glade2). Bạn cũng có thể tạo giao diện đồ họa sử dụng Gtk2 mà không 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; 
+0

Nếu bạn cần một canvas với Gnome2 :: Canvas là anser nặng ký trong khi Goo :: Canvas không có phụ thuộc gnome. – MkV

11

Hãy thử wxPerl!

Từ trang web:

wxPerl là một module mở rộng cho phép việc tạo ra các GUI (Graphical User Interface ) từ Perl; nó được xây dựng như một wrapper cho bộ công cụ GUI tuyệt vời wxWidgets C++ GUI.

+0

không tuyệt vời, Người nước ngoài :: Wx thật khủng khiếp và không hỗ trợ các sự kiện xử lý tệp là trình xử lý giao dịch. – MkV

+0

Thate cũng là một GUI Builder cho wxPerl - wxGlade. Tha lợi thế của bộ công cụ Wx cũng là nó có một cái nhìn bản địa trên trên Windows. – jira

6

Vang vọng Chas Owens, glade là khá hữu dụng với Gtk2 trong Perl. Ngoài ra, Gtk2 cũng hỗ trợ các tập tin GtkBuilder (mà bạn có thể tạo ra các glade mới nhất quá).

Vấn đề chính với wxPerl (và wxWidgets) là nó không cho phép bạn cài đặt trình xem sự kiện tệp vào vòng lặp chính của nó (nó chỉ có các sự kiện GUI, Socket và Timer), không giống như Tk và Gtk.

Vòng sự kiện Qt, Tk và Gtk2 có thể được sử dụng trong Perl với AnyEvent và Gtk2 có thể được nối vào các ứng dụng chạy Event hoặc Ev mainloop với Glib :: Event và Glib :: EV modules.

+0

Gtk2 cũng hoạt động với POE. – jettero

+0

Và POE có thể được sử dụng với AnyEvent, chỉ POE của nó là khủng khiếp về mặt sử dụng và hiệu suất bộ nhớ. – MkV

+0

Thật sao? s/perl/Perl /? Tôi đã đề cập đến nhị phân. – MkV

4

Tôi có thể sử dụng Gtk2, nhưng Tk chắc chắn không chết. Việc thiếu các bản phát hành là do các lỗi được đưa ra trong những năm qua. Rất nhiều người vẫn sử dụng nó, và nó thường hoạt động tốt. (Vòng lặp sự kiện của Tk có phần ngớ ngẩn, nhưng đó là một chi tiết có thể không liên quan đến bạn.) Điểm bất lợi duy nhất là GUI của bạn trông giống như nó là từ năm 1996, nhưng ai quan tâm?

(Công cụ gitk kèm git cho thấy Tk GUI trông tốt miễn là họ đang có ích.)

+0

Công cụ gitk cho thấy tại sao không ai nên sử dụng Tk nữa, và tôi nghĩ - để trả lời câu hỏi tu từ - khá nhiều người quan tâm. – Telemachus

+0

Bạn nghĩ gitk có vẻ ổn chứ? Ồ, chờ đã, bạn sử dụng Linux trên màn hình 8 inch. :) –

+0

Điều tôi muốn nói là bạn có thể rên rỉ về màu của nền giao diện của GUI, tất cả những gì bạn muốn, thực tế là bạn vẫn hoàn thành công việc của mình một cách dễ dàng và hiệu quả. Điều đó có nghĩa Tk là xấu xí, không chết. – jrockway

1

Tôi không có một câu trả lời thực sự cho bạn, nhưng thường bạn phải xem xét các mục tiêu triển khai của bạn . Một số thư viện GUI rất đẹp, nhưng chỉ khi bạn có thể làm cho chúng hoạt động trên hệ điều hành của bạn. Tôi không nhất thiết phải nghĩ rằng tất cả các khuôn khổ cần phải tương thích với nhiều nền tảng, một mục tiêu rất đáng khen ngợi để làm việc hướng tới một thế giới hoàn hảo, miễn là cái bạn chọn không khóa một phần đáng kể người dùng của bạn Các thư viện GUIs khó cài đặt hoặc hỗ trợ trên một nền tảng cụ thể.

+0

Wx, Tk, và Gtk2 là tất cả nền tảng chéo, trong ba Tk là dễ nhất để làm việc, tiếp theo là Wx, tiếp theo là Gtk2. Theo kinh nghiệm của tôi, việc mã hóa dễ dàng theo thứ tự ngược lại. –

+0

Wx là khó khăn để có được làm việc nơi có người nước ngoài :: Wx không làm việc ra khỏi tarball (chủ yếu là hệ điều hành với sharedlibrary.so.number.number, không sharedlibrary.so), đó là lạ kể từ vài thư viện khác bằng cách sử dụng mô-đun perl có Vấn đề đó. – MkV

+0

Gtk2 chỉ là nền tảng chéo theo nghĩa là từ này vô nghĩa. Bạn có phải sử dụng gói nhị phân của ai đó, mà trước đó cho thấy một cái gì đó về thiết lập của bạn, hoặc cố gắng biên dịch nó cho mình và bỏ cuộc. –

0

Giải pháp tôi sẽ làm là Gtk-Perl. Lúc đầu, tôi đã gặp khó khăn khi cài đặt nó, nhưng cuối cùng tôi tìm thấy Camelbox Perl + Gtk2 trong một gói.

1

Tôi chỉ muốn cho mọi người biết PerlQt là tuyệt vời và trang này có rất nhiều hướng dẫn về cách sử dụng và rất nhiều ví dụ để tải xuống.

PerlQt Wiki tutorial

PerlQt là một cách rất nhanh chóng và dễ dàng để tạo lớn đang tìm kiếm các chương trình GUI bằng cách sử dụng kéo và thả Qt thiết kế mẫu và Perl. PerlQt đủ mạnh cho các nhà phát triển nâng cao và dễ dàng cho người mới bắt đầu.

0

Tôi đã sử dụng Tk, nhưng trong vài ngày qua tôi đã được chơi đùa với Continuity (CPAN entry), một stateful (bang dai dẳng cho mỗi người dùng) ứng dụng web/server, và nó có thể dễ dàng có một cách để thêm "GUI "các tính năng vào một ứng dụng, trong khi làm cho nó đa người dùng và di động cùng một lúc.

Chỉnh sửa: Vào thời điểm tôi viết bài này, tôi quan tâm nhất đến thực tế là Continuity có máy chủ web tích hợp sẵn. Điều này cũng đúng với các webframework khác cho Perl. Tôi đã sử dụng Mojolicious mặc dù tôi cũng nghe những điều tốt đẹp về số Dancer.

2

Về chất lượng tiện ích con, tất cả ba gtk2, wx và qt4 đều tốt - gtk2 nhanh nhất, qt4 có độ phân giải tốt nhất, trong khi wx nằm ở vị trí nào đó giữa hai tham số.

Tuy nhiên, tk đứng sau cả ba về tốc độ và độ phân giải, nhưng trước tiên là vì nó là tiện ích gốc cho tất cả ngôn ngữ được giải thích dựa trên unix và thứ hai vì nó là tiện ích gốc của freebsd.

Như ngày hôm nay trong trường hợp perl, tài liệu của perl-gtk2 được phát triển hơn một chút so với cả perl-qt4, lần lượt được phát triển hơn wxperl. Trong thực tế, nếu bạn duyệt web, bạn sẽ thấy rằng các hướng dẫn cho perl-gtk2 là có sẵn rộng rãi hơn thậm chí pygtk (cũng được thiết lập rất tốt) và ruby-gtk2. Trong trường hợp của python, tài liệu wxpython dẫn trên PyQt và pygtk, trong khi trong trường hợp của ruby, ruby-qt4 dẫn trên ruby-gtk2 và wxruby. Tuy nhiên, những người khác đang phát triển rất nhanh (ví dụ: ruby-gtk2) và sau một thời gian, tất cả chín sẽ bằng nhau ở mọi khía cạnh.

Vấn đề cụ thể của perl-qt4 là: Trong trường hợp máy tính để bàn không phải kde, perl-qt4 có thể không chạy. Tôi đã thử chạy tất cả trong ubuntu và sabayon và thấy rằng perl-gtk2 và thậm chí wxperl (và wxruby cũng) chạy tốt trong khi tôi không thể chạy ngay cả một chương trình perl-qt4 duy nhất trong gnome-desktop nơi tôi đã cài đặt hỗ trợ qt4 hoàn chỉnh không có kde.

perl-qt4 yêu cầu cài đặt không chỉ thư viện qt4, mà còn cả thư viện kde-desktop. Vấn đề này là duy nhất perl-qt4-cụ thể, không tồn tại trong trường hợp của PyQt và rubyqt4 vì cả hai đều chạy tốt với thời gian chạy qt4 dưới gnome.

Do đó, theo cách này tám (cộng với ba tk) trong số chín tùy chọn đã làm tốt (tôi đã thử nghiệm PySide chưa).

Trong trường hợp perl-tk, widget được phát triển tốt và được thiết lập và không giống như tkinter, pmw và rubytk, tài liệu của nó là tốt nhất trong số tất cả các đề cập ở trên.

Nhưng có thể sau một thời gian tất cả các tài liệu được phát triển và mọi tài liệu sẽ trở nên tốt đẹp như nhau.

Sau khi cân bằng giữa tốc độ, độ rõ nét và nền tảng chéo, hãy cân nhắc chọn perl-gtk2 hoặc perl-qt4 hoặc wxperl.Các cú pháp perl-tk, perl-gtk2 và perl-qt4 tốt đẹp với cú pháp ngôn ngữ lập trình perl, trong khi cú pháp wxperl trông giống như C++ đúng hơn được pha trộn thành perl khác với cú pháp ngôn ngữ tương ứng (giống như trong trường hợp wxpython và wxruby).

Nhưng nếu bạn đã lưu ý rằng mã wx là khác biệt duy nhất thì bạn có thể bắt đầu ngay với wxperl.

Nếu không, cách tốt nhất là: bắt đầu với perl-tk, sau đó chuyển sang perl-gtk2 rồi perl-qt4 hoặc wxperl, nhưng đảm bảo rằng bạn tìm hiểu tất cả bốn thay vì chỉ một (cùng một chuỗi cũng nên áp dụng để python và ruby ​​quá mặc dù thực tế là hỗ trợ tài liệu là đảo ngược, nhưng trong trường hợp perl ngay cả đối với khía cạnh này nó là như nhau).

2

Gần đây tôi đã được biết về một bộ công cụ GUI khác cho Perl được gọi là Prima. Yêu cầu của nó để nổi tiếng là nó được viết bằng C đặc biệt là cho Perl, không phải là một cổng từ TCL hoặc ràng buộc với cái gì khác. Giả sử bạn có một số thư viện khá chuẩn trên hệ thống của bạn, nó sẽ cài đặt trực tiếp từ CPAN và nền tảng chéo của nó!

David Mertens đã viết một số mới plotting library để sử dụng số PDL và cũng là REPL!

Các vấn đề liên quan