Phát triển GUI bằng Python: Tkinter vs PyQt [đã đóng]


94

Nếu một người muốn phát triển giao diện người dùng bằng Python, thì nên chọn giao diện nào: TkInter hay PyQt?

Tôi chỉ mới bắt đầu với TkInter và tôi đã có thể nhận được một số giao diện người dùng đơn giản với các tiện ích cơ bản như nhãn, nút, hộp văn bản, v.v. Chỉ tò mò muốn biết PyQt sẽ tốt như thế nào so với TkInter?

hoan hô


3
Ngoài ra, hãy lưu ý rằng có khá nhiều tùy chọn có sẵn cho bạn ngoài TkInter và PyQt. wxPython là cái mà bạn nghĩ ngay đến, nhưng có một danh sách đầy đủ hơn tại wiki.python.org/moin/GuiProgramming và một danh sách ngắn hơn về các gói GUI phổ biến hơn được liệt kê tại python.org/doc/faq/gui .
esm

Câu trả lời:


77

PyQt nếu bạn đang phát triển bất kỳ thứ gì nghiêm túc, đặc biệt là những thứ bạn học sẽ dịch trực tiếp sang làm việc với Qt ở các ngôn ngữ khác nếu bạn cần và Qt có lẽ là bộ công cụ giao diện đa nền tảng tốt nhất hiện tại.

Chỉ có hai nhược điểm thực sự (tiềm ẩn):

PyQt chỉ có sẵn theo GPL. Điều này có nghĩa là nếu bạn phát hành mã của mình, mã đó phải có sẵn theo giấy phép tương thích, theo các điều khoản của Ngoại lệ GPL của Nokia hoặc theo giấy phép thương mại (tốn tiền). Điều này trái ngược với Qt, hiện đã có trong LGPL.

PyQt không được bao gồm theo mặc định với các cài đặt Python. Bạn sẽ phải tự đóng gói thư viện. (Ars Technica có một bài viết hay về cách làm điều đó cho Windows và OS X.)


5
Đối với mã nguồn mở, PyQt cấp một ngoại lệ cho GPL chỉ định danh sách các giấy phép mà bạn có thể sử dụng. Văn bản đầy đủ của ngoại lệ có thể được tìm thấy tại đây và một bản sao được bao gồm trong gói nguồn PyQt. Riverbankcomputing.co.uk/software/pyqt/license doc.trolltech.com/4.4/license-gpl-exceptions.html
sunqiang

Đúng vậy, cảm ơn. Tôi đã thêm một ghi chú.
Sam DeFabbia-Kane, 07/07/09

16
Nokia đã bắt đầu xây dựng một thư viện có tên là PySide, cung cấp các chức năng gần giống như PyQt, nhưng dưới LGPL. Tính năng này chỉ khả dụng trên các hệ thống dựa trên * NIX ngay bây giờ. Nhưng bạn hoàn toàn có thể chỉ cần hoán đổi "PyQt4" với "PySide" trong quá trình nhập của mình và (hầu như) mọi thứ đều hoạt động. pyside.org
James

Liên kết cho ngoại lệ GPL của Nokia đã chết.
Stevoisiak

1
Kể từ năm 2019, PyQt5 đã ra mắt và PySide2 hỗ trợ phần lớn các ràng buộc Qt giống nhau theo LGPL.
LightCC

40

PyQt là bộ công cụ GUI chính của chúng tôi bây giờ và sau 1 năm phát triển, tôi không muốn quay lại bất cứ thứ gì khác. Nó ổn định, trưởng thành, đa nền tảng và hoàn toàn tự nhiên. Ngay cả hộp thoại hệ thống (ví dụ để mở tệp) cũng là hộp thoại được hệ điều hành của bạn sử dụng.

Tôi đã điều chỉnh chủ đề XP của mình và bây giờ các ứng dụng của tôi giao diện cho phù hợp. Điều này tạo ra một cái nhìn rất chuyên nghiệp, không thể so sánh với một bộ công cụ như Swing. API mở rộng và vượt xa những thứ GUI thuần túy như widget. Nó có hỗ trợ kết nối cơ sở dữ liệu, in ấn, phân luồng (tôi đã sử dụng nó và nó hoạt động như một sự quyến rũ), ... Tôi thậm chí còn sử dụng nó để tạo PDF (không cần lib bên ngoài khác). Tôi muốn giới thiệu cuốn sách của Mark Summerfield mặc dù ' Lập trình GUI nhanh chóng với Python và Qt ' để giúp bạn tăng tốc. Hãy nhớ rằng Qt đi kèm với trình tạo GUI (Qt designer), đây là công cụ tốt nhất mà tôi đã sử dụng (và tôi đã thử rất nhiều trong số chúng).
Tôi thậm chí còn sử dụng trình tạo này để tạo mô hình để hiển thị cho người dùng (thật dễ dàng!).

Tôi đã giới thiệu nó cho 2 nhà phát triển khác ở đây và chưa nghe họ phàn nàn ...


10
Một lưu ý: Qt chỉ trôngvẻ bản địa. Các phần tử Giao diện người dùng thực sự được mô phỏng (ít nhất là trên Mac OS X). "Cảm giác" của các yếu tố đồ họa được cho là kỳ lạ, đôi khi, do mô phỏng này.
Eric O Lebigot

22

tôi đang dùng tkinter cho các ứng dụng nhỏ với giao diện đơn giản. Tôi rất thích nó, ngay cả khi thiếu WYSIWYG tốt có thể là một vấn đề đối với một ứng dụng lớn hơn.

Đối với các ứng dụng lớn, PyQtcó thể là lựa chọn tốt hơn. Nó có một nhà thiết kế màn hình rất tốt, nhưng việc cấp phép có thể là một vấn đề.

Cuối cùng, wxPythoncó thể là một sự thay thế tốt, bởi vì nó không có những nhược điểm này.


7
Tôi đã viết các ứng dụng thương mại lớn với tk mà không có vấn đề gì. Nó có quy mô khá đẹp. Sẽ không đặc biệt tốt nếu bộ dữ liệu của bạn có hàng triệu mục, nhưng ít người phát triển các ứng dụng như vậy.
Bryan Oakley

2
Cảm ơn Bryan đã phản hồi. Câu trả lời này đã được đưa ra cách đây rất lâu và bây giờ tôi đã có trải nghiệm tốt hơn với Tk và tôi ngày càng thích nó hơn.
luc

tôi đã cập nhật câu trả lời của mình. Nhiều công cụ dành cho nhà phát triển hơn là một vấn đề về khả năng mở rộng
luc

8

PyQt thực sự dễ học và tài liệu cho Qt cũng hoạt động cho PyQt cũng có các cổng cho .NET và Java. Vì vậy, nó là nền tảng cổ tích và ngôn ngữ chéo. Ngoài ra, bạn có PyQt được tích hợp trong Eric IDE .

Sự hỗ trợ cho các kiểu CSS cũng thực sự tuyệt vời.

Xem trình cài đặt OpenSuSE mới để biết bạn có thể làm gì với nó.



1

Tôi sử dụng PyQt. Nó đa nền tảng, dễ làm việc và đáng tin cậy.

Tôi đã sử dụng TkInter một cách nhẹ nhàng và tôi không thấy bất kỳ điểm nào khiến TkInter tốt hơn PyQt.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.