Sử dụng Gtk.Widgets trong Chỉ báo ứng dụng với Python


44

Vào năm 2010, Stefano Palazzo, đã hỏi một câu hỏi liên quan, Đặt một gtk.Widget tùy ý vào một appindicator.Theicator , và một câu hỏi tương tự đã được hỏi trên StackOverflow . Trong cả hai trường hợp, sự đồng thuận là các Chỉ số Ứng dụng của Ubuntu bị hạn chế. Như Michael Ekstrand đã nói:

Hỗ trợ menu Chỉ số ứng dụng dựa trên các menu D-Bus, bị giới hạn ở những gì chúng hỗ trợ - chúng chỉ hỗ trợ chức năng menu cơ bản, không phải những thứ kỳ lạ hơn như các widget tùy ý.

Tuy nhiên, nó mâu thuẫn với những gì chúng ta thấy trong chỉ báo Bluetooth ngày hôm nay, năm 2016: nó sử dụng các công tắc bật tắt.

nhập mô tả hình ảnh ở đây

Điều tương tự có thể được quan sát với chỉ báo Ubuntu One từ 13.04:

nhập mô tả hình ảnh ở đây

Vì vậy, rõ ràng có một cách. Tôi đã nghiên cứu mã nguồn bluetooth-chỉ báo, nhưng nó được viết bằng Vala. Tuy nhiên, tôi làm việc chủ yếu bằng python và học Vala chỉ để viết lại tất cả các chỉ số đã có của tôi là một công việc hơi quá.

Vì vậy, cốt lõi của câu hỏi: Làm thế nào một người có thể sử dụng Gtk.Widgets hoặc ở mức tối thiểu một công tắc bật tắt giống như trong chỉ báo Bluetooth, sử dụng Python?

LƯU Ý : Tôi sẵn sàng đặt tiền thưởng cho câu hỏi này để thưởng cho câu trả lời sẽ cung cấp một ví dụ hoạt động trong python . Các ngôn ngữ khác không được chấp nhận.


6
Chỉ báo ứng dụng bị giới hạn thậm chí không hỗ trợ biểu tượng khi đang di chuyển (nó chỉ tải tệp hình ảnh từ hệ thống tệp). Các chỉ số mà bạn đã đề cập là các chỉ số HỆ THỐNG (bluetooth, ubfox one, âm thanh, công suất, ...). Họ khác nhau và họ không sử dụng libappindicator. Tôi đã đăng một vài bài viết có thể giúp làm rõ sự khác biệt. Tôi đã có một chỉ báo hệ thống hoạt động bằng C. nhưng trong python tôi vẫn đang vật lộn.
user.dz

2
Có cách nào để thu hút sự chú ý của các nhà phát triển cốt lõi Ubuntu cho câu hỏi này không?
don.joey

1
Ít nhất là test = Gtk.CheckMenuItem("Monkey")hoạt động thêm một nút kiểm tra, nhưng nên có nhiều hơn. Trong khi cái đó hoạt động, cái này sẽ hoạt động, nhưng không : Gtk.CheckMenuItemToggled("Monkey"). Tôi khá chắc chắn rằng nó có thể làm việc dù sao đi nữa. Xem: developer.gnome.org/gtk3/urdy/GtkCheckMothyItem.html
Jacob Vlijm

1
@JacobVlijm có, thêm bất kỳ công trình menuitem duy nhất, nó còn có tác dụng thêm một Gtk.Box và thêm Gtk.Label đến hộp đó, nhưng không có gì khác (nó nói widget có thể chứa chỉ có một mục.
Sergiy Kolodyazhnyy

1
Gtk.ImageMenuItemkhông được khuyến khích và không khuyến khích sử dụng btw: developer.gnome.org/gtkmm/
sóng / deprecated.html

Câu trả lời:


1

Vấn đề này tồn tại bởi vì mặc dù AppIndicators giúp dễ dàng tạo một menu chỉ báo, nhưng chúng lại gây cản trở. Chúng ta hãy xem xét sự khác biệt giữa mã python ví dụ bằng AppIndicator và một sử dụng GLib Menu theo cách mà mã Bluetooth thực hiện.

Trước tiên, bạn được hướng dẫn để tạo một gtk.Menu, đây là các đối tượng trình đơn Gtk kiểu cũ Gtk.Actionhiện đang không dùng nữa. AppIndicator lấy gtk.Menuđối tượng từ bạn trong suốt set_menu(...)quá trình và phân tích cú pháp, đẩy từng menu mà nó tìm thấy vào dịch vụ chỉ báo được tạo bằng cách sử dụng libdbusmenu. Quá trình phân tích cú pháp này có nghĩa là mọi thứ không được AppIndicator hỗ trợ đều được lọc ra, bất kể bạn làm gì.

Tiếp theo hãy nhìn vào menu Bluetooth. Được tạo bằng Gio.Menucác đối tượng, đây là các menu Gnome kiểu mới sử dụng GActionhệ thống. Sau đó, nó đã đăng ký dịch vụ riêng của mình mà không sử dụng AppIndicatorhoặc libdbusmenuthiết lập sử dụng thuộc tính tùy chỉnh x-canonical-typeđể tạo tiện ích chuyển đổi được chuyển qua để libidophân tích cú pháp.

Toàn bộ bài tập này khá tệ, vì đó là tất cả các tùy chỉnh Unity của Canonical. Vì vậy, ngay sau khi thống nhất đi, dù sao cũng không có người lập trình.

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.