Sự khác biệt giữa GTK và QT là gì?


29

Hãy đồng ý với tôi vì tôi là người mới sử dụng Linux. Tôi đã viết các chương trình GUI bằng REALbasic trên máy Mac trong vài năm. Tôi đang cố gắng học Python và tôi muốn viết các ứng dụng GUI cho Linux (chủ yếu là Ubuntu và Mint vì chúng là các bản phân phối mà tôi có quyền truy cập và chúng dường như là phổ biến nhất). Tôi về cơ bản có ba câu hỏi:

  1. Có sự khác biệt đáng kể nào giữa GTK và QT không
  2. Tôi đã chơi với quicklyGladetrên Ubuntu nhưng tôi hiểu rằng chúng dựa trên GTK 2 và điều này hiện đã lỗi thời. Đúng không?
  3. Có bất kỳ trình soạn thảo tất cả trong một nào cho phép tôi thiết kế GUI và sau đó thêm mã Python vào nó không? (ví dụ: thêm một nút vào một cửa sổ trong trình chỉnh sửa, nhấp đúp vào nút và sau đó thêm mã Python sẽ thực thi khi nhấn nút này)

Xin lỗi nếu đây là những câu hỏi thực sự ngớ ngẩn nhưng tôi muốn bắt đầu học các công cụ 'đúng' ngay từ đầu.


2
Tôi không có thời gian để trả lời câu hỏi của bạn, nhưng tôi có thể làm rõ điều gì đó. Glade từng là cả thư viện, định dạng cho tệp định nghĩa UI và ứng dụng để tạo các tệp .glade đó. Bây giờ chúng tôi sử dụng GtkBuilder cho định dạng Glade đã từng làm và được tích hợp vào GTK. Glade ứng dụng tồn tại như một công cụ tuyệt vời để tạo các tệp .ui cho GtkBuilder (hoặc đơn giản là để kiểm tra các bố cục khác nhau), và Glade 3.x chắc chắn làm Gtk3 - mặc dù không phải mọi thứ đều có ở thời điểm này.
Dylan McCall

Điều đó rất hữu ích. Vì vậy, nếu tôi quyết định sử dụng GTK làm bộ công cụ của mình thì tôi sẽ sử dụng Glade để thiết kế bố cục và một công cụ khác để liên kết mã Pyhton của tôi và thiết kế UI - đúng không?
Nootrino

Đúng, và công cụ đó là một phần của GTK, vì vậy nó được ghi lại ở đây: developer.gnome.org/gtk3/3.1/GtkBuilder.html Tôi đang liên kết bạn với tài liệu C vì nó khá chi tiết và khi bạn đang sử dụng PyGObject sự khác biệt thực sự duy nhất sẽ là cú pháp. Trong Python, tên và công cụ sẽ trông giống như thế này: valadoc.org/gtk+-3.0/Gtk.Builder.html
Dylan McCall

Câu trả lời:


12

Tôi sẽ cố gắng trả lời câu hỏi của bạn, mà không đi theo hướng điên rồ.

  1. Chúng khác nhau đáng kể, mặc dù cả hai đều là lib. GTK + thông thường dựa trên C và QT trên C ++. Mặc dù các ràng buộc tồn tại cho hầu hết các ngôn ngữ lập trình.

  2. Bạn khá chính xác về GTK2, mặc dù có rất nhiều ứng dụng GTK2. Tôi hy vọng GTK2 sẽ được sử dụng trong một thời gian, giống như GTK1. Khi gặp sự cố, GTK2 không được dùng nữa và nếu bạn đang bắt đầu sử dụng GTK3 mới.

  3. Remeber GTK và QT, chỉ là các bộ công cụ phụ tùng. Ví dụ ... ứng dụng Gnome, sử dụng GTK và cả Gnome-Libs. Nếu bạn muốn điều đó, hãy xem vala. Nó được coi là đơn giản, vala biên dịch nguồn-nguồn trực tiếp đến C và có các ràng buộc đầy đủ cho nhiều ngôn ngữ lập trình. Bạn cũng có thể muốn xem Anjuta, chỉ cần đảm bảo rằng bạn có các phiên bản gtk3 mới. Rõ ràng eo biển PyGTK chỉ hỗ trợ GTK2, hiện tại tôi đã kiểm tra. Nếu bạn đang tìm cách tránh tất cả các lib Linux DE, tôi khuyên bạn nên xem xét QT. Plain QT khác với các ứng dụng KDE, bao gồm các lib KDE. QT được coi là rất đa nền tảng, thật tuyệt nếu bạn muốn biên dịch cho non * nix. Nếu bạn muốn bắt đầu với QT + Python, hãy xem PySide (LGPL) hoặc PyQT (GPL). QT có một số trình xây dựng GUI tốt như người tạo qt và người thiết kế qt.


Cảm ơn vì điều đó. Anjuta trông khá giống những gì tôi đã có sau đó. Tôi sẽ chơi xung quanh với nó một chút. Nếu nó không đúng thì tôi sẽ xem xét QT. Tôi nhận ra rằng cả GTK và QT đều đạt được kết quả cuối cùng - tôi đoán đó chỉ là vấn đề ưu tiên.
Nootrino

Qt không chỉ là một bộ công cụ phụ tùng. Nó là toàn bộ khung, sao chép các khối lớn của STL và Boost.
scottl

@scottl, tôi đã không cố gắng hạn chế QT. Mặc dù QT có khả năng nhiều hơn chỉ là các vật dụng, nhưng trong bối cảnh đó, nó đã trở thành một phần của giải pháp tiềm năng.
JM Becker

@Nootrino: bạn phải nhớ trong thế giới FLOSS, thường có nhiều hơn một giải pháp được thiết lập. Lý do nhiều người đã chọn, người này hay người kia, dựa trên vị trí C vs, C ++ của họ. Tất nhiên, giấy phép đã đóng một phần lớn hơn trong quá khứ. Bất kể các khung khác trong nhiều ngôn ngữ tồn tại, bạn thường đồng ý nhiều hơn với một phương thức.
JM Becker

@Nootrino: Tôi rất vui vì tôi đã có thể thực sự giúp đỡ!
JM Becker

5

GTK và Qt là các bộ công cụ Giao diện người dùng và khung phát triển đa nền tảng nguồn mở. Đây là hai khung phổ biến nhất được sử dụng cho Linux vì chúng là nguồn mở và cung cấp cho các nhà phát triển một bộ công cụ mạnh mẽ để thiết kế Giao diện người dùng đồ họa. GTK được sử dụng làm bộ công cụ tiêu chuẩn cho Môi trường máy tính để bàn Gnome, LXDE và Xfce trong khi Qt được sử dụng cho KDE.

Nếu bạn mã bằng C, thì rõ ràng là đi GTK +

Nếu bạn viết mã bằng C ++, hãy tìm Qt, nếu không bạn sẽ ned Gtkmm (trình bao bọc C ++ qua GTK +)

Nếu bạn viết mã bằng Python, cả GTK + và Qt đều có các ràng buộc cho ngôn ngữ: xem PyGtk, PyQt và PySide (bản do Nokia tự khởi chạy).


Nếu bạn đang sử dụng Python, PyGTK không được dùng nữa. Đối với các dự án mới, bạn sẽ sử dụng PyGObject (python-gobject trong kho lưu trữ của Ubuntu) tốt hơn nhiều: live.gnome.org/PyGObject PyGObject cho phép bạn kết nối với bất kỳ thư viện nào được xây dựng trên GLib (như GTK) thông qua Python, mà không cần thêm lớp nào. Bạn nhận được một cái gì đó rất giống PyGTK, nhưng nó đi về nó hoàn toàn khác. Và, tất nhiên, PyGObject là cách duy nhất để nói chuyện với GTK3 thông qua Python.
Dylan McCall

-2

Qt chủ yếu được sử dụng trong KDE và GTK + trong Gnome. Vì vậy, nếu bạn muốn phát triển cho Gnome, hãy xem xét GTK + vì các phụ thuộc cần thiết cho các thư viện GTK + đã được cài đặt trên hệ thống Gnome; người dùng cuối sẽ không cần phải cài đặt chúng. Phát triển GTK + cũng được hưởng lợi bởi một công cụ có tên Glade Interface Designer ; nếu bạn muốn, bạn có thể sử dụng nó để tạo giao diện người dùng của bạn.


5
QT là một bộ công cụ đa nền tảng, nó không chỉ được sử dụng trong KDE và GTK cũng vậy. VÀ xin vui lòng không viết "txt like dis" ...
Uri Herrera
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.