Làm cách nào để thêm hỗ trợ cho menu toàn cầu vào ứng dụng python non-gtk, non-qt?


24

Tôi đang tìm tài liệu tốt (ví dụ, hướng dẫn hoặc hướng dẫn) về cách thêm hỗ trợ menu toàn cầu vào ứng dụng không gtk, không qt. (Trong gtk, nó hoạt động 'kỳ diệu' cho menu chính ...). Bộ công cụ tôi muốn sử dụng với công cụ này là kivy , hỗ trợ glib-mainloop (ví dụ: cho trình phát), vì vậy về nguyên tắc tất cả nên hoạt động ở đó.

Tôi đã thấy tài liệu tham khảo API của Dbusmenuở đây , nhưng điều đó không hữu ích lắm để hiểu các cơ chế.

Có một ví dụ ngắn để tạo một launcher-quicklist chứa menu dbus, nhưng không phải cho menu toàn cầu / appmenu.

Có một trang wiki không chứa bất kỳ thông tin liên quan nào khác ngoài đó "Làm việc hỗ trợ các menu ứng dụng khác trên các bộ công cụ khác sẽ được hoan nghênh, nhưng không phải là ưu tiên cho nhóm DX, cần trợ giúp."

Có một ít thông tin trong đồ họa này từ mã nguồn chỉ số-appmenu, nhưng nó không đủ, không thể tìm thấy trên developer.ub Ubuntu.com và yêu cầu giải thích thêm:

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

Vì thế:

  • Quy trình để có được một tập hợp các mục menu (Dbusmenu.Menuitem) sẽ được hiển thị là gì?
  • Máy khách và máy chủ đóng vai trò gì? (Cái nào được cho là chạy trong ứng dụng của tôi? Hoặc cả hai?)

Câu hỏi tương tự


Có lẽ bạn có thể thêm bộ công cụ bạn đang sử dụng.
Timo

chắc chắn: đó là bộ công cụ kivy.
xubuntix

1
Tôi nghĩ rằng câu hỏi này cần một câu trả lời từ kinh điển.
Tachyons

Ban đầu tôi đã hy vọng rằng các tác giả của dbusmenu-glib (ví dụ Ted Gould), hoặc thậm chí libdbusmenu-qt (Aurelien Gateau) có thể dành thời gian để viết tài liệu về mã của họ. Nhưng sau 4 tháng chờ đợi, không có gì xảy ra. Vì vậy, tôi đã thử lựa chọn tốt thứ hai, cố gắng 'mua chuộc' cộng đồng bằng danh tiếng của mình để bước vào. Có vẻ như điều này không hoạt động tốt ...
xubuntix

@xubuntix đề nghị bạn liên hệ trực tiếp với Ted ( gould.cx/ted/blog ) và aurelien ( agateau.com/about-me )
fossfreedom

Câu trả lời:


14

Nói chung, tôi khuyên bạn nên sử dụng bộ công cụ hỗ trợ các cách để đặt menu trong thanh thực đơn toàn cầu ... nhưng, tôi cho rằng đã quá muộn để thuyết phục bạn vào thời điểm này :-) Ngoài ra, tôi sẽ lưu ý rằng thậm chí chúng tôi nghĩ rằng chúng tôi thậm chí còn nghĩ rằng chúng tôi Đang sử dụng Dbusmenu và đăng ký vào 12.04, mục tiêu là chuyển sang GMothyModel và đánh dấu cửa sổ bằng các menu của nó trước 14.04, vì vậy thông tin này sẽ trở thành ngày. Tất nhiên, các plugin của bộ công cụ sẽ được cập nhật ;-) (lần trước tôi sẽ thử, tôi hứa)

Nguyên tắc cơ bản liên quan là chúng ta cần biết menu nào được liên kết với cửa sổ nào. Chúng tôi theo dõi cửa sổ bằng XID của nó và các menu là đường dẫn đến Máy chủ Dbusmenu trên DBus. Bạn sẽ cần cả hai thông tin để đăng ký. Giao diện đăng ký khá đơn giản ở chỗ bạn về cơ bản chuyển cả hai thông tin đó cho nhà đăng ký. Tên nổi tiếng của nhà đăng ký trên DBus là com.canonical.AppMothy.Registrar .

Để biết ví dụ về cách thức này có thể hoạt động, bạn có thể xem mã mẫu mock-json-app có trong chỉ số-appmenu . Đây là một công cụ nhỏ sẽ lấy đầu ra tệp JSON của dbusmenu-dumper (nằm trong libdbusmenu-tools ) và tạo một cửa sổ tuyên bố có menu đó. Nó cũng xử lý những thứ như sự cố appmenu, có thể không thực sự cần thiết cho hầu hết các ứng dụng (mặc dù nó thực sự quan trọng trong sự phát triển :-)).

Để tạo Máy chủ Dbusmenu, về cơ bản bạn chỉ cần phân bổ đối tượng và cho nó biết nơi xuất hiện trên DBus (để bạn có thể cung cấp vị trí cho nhà đăng ký). Đối với các plugin như appmenu-gtk, chúng tôi sử dụng một đường dẫn được tạo để không có xung đột, nhưng nếu bạn đang kiểm soát ứng dụng, bạn có thể sử dụng một đường dẫn cố định. Sau đó, bạn tạo một cấu trúc cây của các đối tượng Dbusmenu Menuitem . Cái gốc không được hiển thị, nhưng được chuyển đến Máy chủ Dbusmenu để bắt đầu các menu. Cấp độ đầu tiên dưới gốc sẽ được hiển thị dưới dạng các mục trên Ubuntu Menubar .

Chúc may mắn, cảm ơn tất cả những người đã quấy rối tôi để trả lời câu hỏi này. Tôi vẫn tin rằng bạn nên sử dụng bộ công cụ hỗ trợ (tôi đã nói dối về việc đó là lần cuối cùng), nhưng chúc may mắn!


1
Cảm ơn nhiều! Và cảm ơn tất cả những người đã quấy rối bạn :-) Đối với câu hỏi về bộ công cụ: Tôi rất thích sử dụng bộ công cụ hỗ trợ, nhưng không có gì cho Kivy. Và tôi sẽ không chuyển đổi bộ công cụ chỉ cho menu ... Việc chuyển sang GMothyModel có làm cho nó không thể sử dụng nó với các bộ công cụ khác không?
xubuntix

GMothyModel sẽ giúp việc ngược dòng dễ dàng hơn trong nhiều bộ công cụ vì hỗ trợ trực tiếp trong GLib do đó không có sự phụ thuộc bổ sung, làm phiền một số người bảo trì bộ công cụ.
Ted Gould

@TedGould Câu trả lời tuyệt vời, Ted! Tuy nhiên, có một ví dụ ít GTK? Một cái gì đó gần như chỉ sử dụng Xlib càng tốt, và không có gì khác? Ví dụ về ứng dụng mock-json mà bạn đưa ra là tuyệt vời, nếu một người sử dụng Gtk; không quá nhiều nếu X11 được sử dụng trực tiếp (hoặc bộ công cụ khác). Tôi đang cố gắng kết hợp một cái gì đó chỉ sử dụng Glib, libdbusmenu-glib và X11, nhưng có vẻ như tôi đang gặp rắc rối. Mục tiêu của tôi? Tôi quan tâm đến việc thêm hỗ trợ trong ứng dụng SDL và tôi liên tục nghĩ về các ứng dụng GNUstep không có hỗ trợ cho dbusmenu.
Ivan Vučica

1
@TedGould Nỗ lực của tôi đã kết thúc tại đây: bitbucket.org/ivucica/minidbus-menu Hy vọng bạn (hoặc ai đó!) Sẽ có vài phút để xem mã và xem tại sao menu không xuất hiện và tại sao thanh tiêu đề nói "Hud". :-)
Ivan Vučica

Có vẻ như tôi đã nhận được mã C để làm việc dưới 12.04. Tôi không nên cố gắng thêm các mục độc lập vào menu; đã thêm chúng dưới dạng phụ của một mục menu khác, bây giờ nó hoạt động. Thật tuyệt;)
Ivan Vučica

0

Thật không may, bạn sẽ không tìm thấy một tài liệu thân thiện cho điều đó. Menu toàn cầu được phát triển với GTK và Qt trong tâm trí, trong khi về mặt lý thuyết có thể thực hiện hỗ trợ cho các webkits khác vì giao thức dựa trên DBus, có rất ít nỗ lực trong việc cung cấp tài liệu.

Các con trỏ tốt nhất tôi có thể cung cấp cho bạn là mã nguồn của chỉ báo-appmenuplasma-widget-menubar . Bạn có thể đọc chúng để hiểu cách thức hoạt động của giao thức dbus.


1
Có thể nó cũng giúp để có được một dấu vết theo dõi dbus của cuộc trò chuyện cho một số trường hợp đại diện? Tôi không biết đủ về dbusmenu hoặc theo dõi dbus để biết, nhưng tôi rất muốn xem một số ví dụ từ một người nào đó.
nealmcb

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.