2010-11-10 38 views
11

Tôi muốn phát triển một ứng dụng đa nền tảng vừa/nhỏ (bao gồm GUI).Python + QT, Windows Forms hoặc Swing cho một ứng dụng đa nền tảng?

Nền của tôi: hầu hết các ứng dụng web với kiến ​​trúc MVC, cả Python (Pylons + SqlAlchemy) và Java (biết ngôn ngữ tốt, nhưng không thích nó nhiều). Tôi cũng biết một số C#. Cho đến nay, tôi không có kinh nghiệm lập trình GUI (không phải Windows Forms, Swing hay QT).

Tôi dự định sử dụng SQLite để lưu trữ dữ liệu: Có vẻ là một giải pháp đa nền tảng tốt đẹp và có một số tính năng mạnh mẽ (ví dụ: tìm kiếm văn bản đầy đủ, mà SQL Server Compact thiếu).

Tôi đã làm một số nghiên cứu và đây là những lựa chọn yêu thích của tôi:

1) QT, Python (pyQT hoặc PySide), và SQLAlchemy

ưu:

  • Python ngôn ngữ
  • nguồn mở mạnh mẽ trong thế giới Python (rất nhiều librar người dùng và người dùng)
  • SQLAlchemy: Một cách tuyệt vời để tương tác với DB và tài liệu cực kỳ tốt!

khuyết điểm:

  • biên soạn, phân phối và triển khai khó khăn hơn?
  • không có kinh nghiệm QT
  • QT thiết kế không đẹp như nhà thiết kế Studio Winforms trực quan

2) .NET/Mono, Windows Forms, C#, (Fluent) NHibernate, System. Data.SQLite

ưu:

  • C# (tôi thích nó, đặc biệt ecially so với Java và muốn có được nhiều kinh nghiệm trong nó)
  • Các nhà thiết kế Winforms GUI trong Visual Studio dường như thực sự trơn tru
  • IntelliSense
  • ClickOnce triển khai (?)
  • Windows Forms xem và cảm nhận tốt trên Windows

khuyết điểm:

  • (Fluent) NHibernate ít tài liệu hơn SQLAlchemy; cũng gây phiền nhiễu: Tài liệu lưu loát tham khảo tài liệu NHibernate đề cập đến Hibernate (aargh!). Nhưng đồng bằng NHibernate + XML không trông rất thoải mái.
  • Biểu mẫu Windows sẽ không hiển thị + hoạt động gốc trên Linux/Mac OS (chính xác?)
  • ít thư viện nguồn mở hơn.NET thế giới, ít người sử dụng phần mềm nguồn mở, ít tài liệu nói chung
  • không WinForms và NHibernate kinh nghiệm

3) JVM, Java + Jython, Swing, SQLAlchemy
(tôi cảm xúc thiên vị chống lại thế này, nhưng được liệt kê cho đầy đủ vì lợi ích)

ưu:

  • JVM/Swing công việc cũng như cơ sở nền tảng
  • Jython
  • SQLAlchemy
  • rất nhiều thư viện nguồn mở

khuyết điểm:

  • Swing có vẻ xấu xí và khó khăn để bố trí
  • thiếu trình thiết kế giao diện người dùng tốt
  • Đoán rằng tôi sẽ không thể oid Java cho UI thứ
  • Không chắc thế nào ổn định sự hội nhập Jython/Java là

(Tùy chọn mà tôi đã loại trừ khả năng ... chỉ để tránh thảo luận về những):
- wxWidgets/wxPython (nay rằng QT được LGPLed)
- GTK/PyGTK

Giao diện của ứng dụng cuối cùng là rất quan trọng đối với tôi. Các ngăn xếp công nghệ ở trên rất khác nhau (PyQT, .NET WinForms, JVM Swing) và yêu cầu một thời gian để thành thạo, vì vậy:

Bạn sẽ đề xuất phương án thay thế nào và tại sao?

+0

Về 3) Có một trình tạo GUI theo định hướng XML; http://swixml.org/index.html Nhưng hành vi năng động của giao diện người dùng, xác định các quy tắc kinh doanh của ứng dụng, phải được mã hóa bằng Java. – Houtman

+0

@Martin S. Tôi có một câu hỏi tương tự ngay bây giờ. Bạn có thể bình luận về con đường bạn đã chọn và tại sao không? – ostrokach

Trả lời

5

Tôi là một anh chàng Python và sử dụng PyQt bản thân mình, và tôi hoàn toàn có thể giới thiệu nó. Liên quan đến nhược điểm của bạn:

biên dịch, phân phối và triển khai khó khăn hơn?

Không, không thực sự. Đối với nhiều dự án, ví dụ: setup.py đầy đủ, ví dụ: cx_Freeze có thể dưới 30 dòng hiếm khi cần thay đổi (hầu hết các phụ thuộc import được phát hiện tự động, chỉ cần chỉ định một vài mô-đun không được nhận dạng), và sau đó python setup.py sẽ tạo một tệp thực thi độc lập. Sau đó, bạn có thể phân phối nó giống như ví dụ: một C++ .exe.

không có kinh nghiệm QT

Tôi không có kinh nghiệm giao diện đáng chú ý hoặc là khi tôi bắt đầu ra với Qt (chỉ một chút không quan trọng với Tkinter), nhưng tôi đã lên đến yêu Qt. Hầu hết thời gian, tất cả các tiện ích hoạt động liền mạch và thực hiện những gì họ phải làm - và có một số trong số đó cho nhiều mục đích. Bạn đặt tên cho nó, có thể là một tiện ích thực hiện điều đó và không làm phiền người dùng bằng cách được hỗ trợ một nửa. Tất cả những điều tốt đẹp chúng tôi đã bị hư hỏng đều ở đó.

Qt lớn, nhưng tài liệu PyQt trả lời hầu hết câu hỏi với nỗ lực tìm kiếm hợp lý. Và nếu mọi thứ khác thất bại và bạn biết một chút về C++, bạn cũng có thể xem các tài nguyên Qt.

QT thiết kế không đẹp như nhà thiết kế Visual Studio Winforms

Tôi không biết các nhà thiết kế VS Winforms, nhưng tôi phải thừa nhận rằng các nhà thiết kế Qt đang thiếu. Tôi đã kết thúc phác thảo giao diện người dùng trong nhà thiết kế, tạo mã, dọn dẹp và chăm sóc tất cả các chi tiết còn lại bằng tay. Nó hoạt động tốt cho đến nay, nhưng các dự án của tôi khá nhỏ.


PS:

(bây giờ mà QT được LGPLed)

PyQt vẫn chỉ là GPL. PySide là LGPL, có, nhưng nó không phải là trưởng thành, nếu đó là một mối quan tâm. Trang web của dự án nói rằng "bắt đầu phát triển trên PySide nên được khá an toàn ngay bây giờ" mặc dù.

+0

Rất vui được nghe trải nghiệm của bạn, cảm ơn! Về PySide: Theo các câu hỏi thường gặp của họ, họ đang tiếp cận bản phát hành 1.0 ổn định ... vì vậy tôi sẵn sàng đặt cược vào điều đó. –

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