2012-06-15 48 views
11

Tôi có một ứng dụng có GUI sẽ được làm lại cho các lý do tiện lợi. Nó được viết bằng PyGTK và tôi tự hỏi liệu tôi có nên chuyển sang PyQt để dễ dàng phát triển trong tương lai hay không. Ứng dụng này có giao diện người dùng cổ điển với các nút, thanh công cụ, hộp thoại, vv nhưng cũng có một số yêu cầu cụ thể: tôi chắc chắn sẽ cần tạo tiện ích tùy chỉnh dựa trên treeview/tableview (để tạo tiện ích giống bảng tính) và ứng dụng này có rất nhiều luồng công nhân cập nhật GUI.Ưu điểm của PyQt so với PyGTK và ngược lại là gì?

Tôi đang tìm kiếm lời khuyên về hai điểm này:

  • Đối với các widget tùy chỉnh sáng tạo, không PyQt cung cấp cơ chế tốt hơn so với PyGTK, đặc biệt là một chút thay đổi widget hiện có.
  • Tôi gặp vấn đề với (ngay cả khi sử dụng đúng thread_init() và threads_enter()) việc cập nhật GUI bằng các luồng công nhân khi sử dụng PyGTK. PyQt có tốt hơn vào thời điểm đó không?
+2

Vâng, vì một điều PyGTK không còn được phát triển tích cực nữa. [PyGObject] (https://live.gnome.org/PyGObject) dường như là cách để làm mọi thứ ngay bây giờ. –

+0

Bản cập nhật từ chuỗi công việc luôn hoạt động với 'gobject.idle_add'. 'threads_init' không được hỗ trợ trên Windows. Điều này có thể là vấn đề? – schlamar

Trả lời

0

Tôi không thể so sánh, bởi vì tôi không sử dụng GTK, nhưng tôi muốn đề xuất Qt.

Qt chắc chắn có "treeview/tableview" bạn đang nói về và bạn có thể làm cho "tế bào" widget tùy chỉnh của bạn (tôi chỉ đang nghiên cứu chủ đề này ngay bây giờ). Qt đã được thực hiện với rất nhiều suy nghĩ về chủ đề, do đó, chủ đề công nhân có thể sử dụng cơ chế tín hiệu/khe một cách dễ dàng. Và có, bạn có thể sửa đổi các widget hiện có bằng cách áp dụng các bảng định kiểu hoặc phân lớp con.

Bây giờ về PyQt, tôi sẽ không khuyên bạn nên vì vấn đề cấp phép. PySide có vẻ giống như một Qt → Python tốt hơn ràng buộc với tôi: nó có thể được sử dụng trong các ứng dụng thương mại một cách tự do và có một vài lợi thế nhỏ trong API (nhưng ngược lại nó hoàn toàn tương thích với PyQt).

Qt là nền tảng chéo và triển khai các ứng dụng PySide rất dễ dàng với cx_Freeze; người dùng ứng dụng của bạn sẽ không phải cài đặt gì cả.

+2

Chỉ để được trái, tôi sẽ khuyên bạn nên PyQt hơn Pyside vì Pyside là một dự án mới hơn và vẫn có xu hướng được một chút buggy trong kinh nghiệm của tôi. Tuy nhiên, các API cho hai thư viện gần như giống hệt nhau, do đó, không nên quá nhiều nỗ lực để chuyển đổi giữa chúng nếu bạn thay đổi ý định. – Luke

+1

@Luke Tôi luôn cố gắng 'nhập PySide' trước và vào' ImportError' 'import PyQt4' (không chắc chắn hậu quả cấp phép sẽ là gì), và làm cho các ứng dụng của tôi làm việc với Python 3 và Python 2, tất cả chỉ với một codebase. –

+1

Tôi cũng khuyên bạn nên sử dụng PyQt trên PySide nếu bạn không cần LGPL. PyQt là một dự án trưởng thành hơn nhiều, và có một người bảo trì rất năng động và chuyên nghiệp. Tôi cũng đã tìm thấy PySide có nhiều lỗi hơn, mặc dù tôi thừa nhận rằng tôi đã không sử dụng nó nhiều trong thời gian gần đây, vì vậy mọi thứ có thể đã thay đổi trong vấn đề đó. – ekhumoro

0

Tôi cũng không có kinh nghiệm với GTK, nhưng có thể cung cấp một số câu trả lời vẫn:

  • Qt được thiết kế từ mặt đất lên để được hướng đối tượng; hầu hết mọi thứ trong đó đều có sự hỗ trợ tuyệt vời cho việc phân lớp. PyQt cũng vậy.

  • Qt rõ ràng KHÔNG hỗ trợ sửa đổi GUI bằng bất kỳ chủ đề nào khác ngoài luồng GUI chính. Bạn có thể gây ra sự cố theo cách này. Tuy nhiên, như BlaXpirit đã đề cập, có rất nhiều cơ chế giao tiếp liên thông rất dễ dàng như tín hiệu đi qua.

0

Chắc chắn PyQt ... Có rất nhiều ứng dụng nâng cao sử dụng nó ... Cá nhân, tôi đang sử dụng KDE, vì vậy, ngay cả GUI của hệ thống cũng sử dụng Qt! Tôi cũng đang tạo một ứng dụng bảng tính và tôi thấy rằng nó dễ dàng hơn nhiều so với những gì tôi nghĩ lúc đầu ... Nhưng, BiaXpirit cũng đúng: ngoại trừ nếu bạn đang phát triển một ứng dụng mã nguồn mở, có lẽ bạn nên sử dụng PySide hoặc một cái gì đó khác ...

0

Tôi cũng chưa bao giờ sử dụng PyGTK nhưng tôi nghĩ hai tính năng của Qt đặc biệt tốt là: model/view lập trình và signal/slots. Nếu bạn cần loại công cụ đó, tôi sẽ nói rằng nó đáng giá ít nhất là đọc các tài liệu về chúng và so sánh hai bộ công cụ với sự tôn trọng đó.

Nhà thiết kế cũng tiết kiệm thời gian như vậy. Các promotion feature --- bạn có thể tùy chỉnh các vật dụng của bạn trong nhà thiết kế thay thế nó bằng một cái gì đó tương tự, ví dụ bạn đã thực hiện một cái nhìn cây tùy chỉnh với các chức năng của bạn --- chỉ là rất thuận tiện. Bạn có thể sử dụng trình thiết kế để hiển thị chế độ xem dạng cây thông thường nhưng khi bạn xuất nó sử dụng lớp tùy chỉnh của bạn.

Các docs là tuyệt vời.

Chỉnh sửa: Bạn có thể sử dụng trực tiếp tài liệu Qt. Tôi đã được lập trình trong python sử dụng PySide và chỉ có một vài trường hợp tôi thực sự cần tài liệu cụ thể. Mặc dù nó exists.

2

Tôi thích GTK + nhất, vì (ít nhất với tôi) trông đẹp hơn. PyQt và các biến thể (ví dụ: PySide), tuy nhiên, có một tập hợp lớn các tính năng bổ sung, bao gồm công cụ WebKit, trình phân tích cú pháp XML, hỗ trợ SQL và hơn thế nữa.

Nếu bạn chỉ muốn giao diện, tôi muốn nói GTK +/PyGObject. Nếu bạn đang có kế hoạch sử dụng bất cứ thứ gì PyQt có, hãy sử dụng PyQt.

Một lưu ý phụ, nếu bạn gắn bó với GTK +, tôi khuyên bạn nên nâng cấp lên PyGObject và GTK + 3.0, vì PyGtk + không còn được duy trì nữa.

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