Làm cách nào để làm cho thanh tiến trình launcher hoạt động với ứng dụng của tôi?


10

Nghiên cứu cơ bản

Tôi đang cố gắng cập nhật thanh tiến trình trong trình khởi chạy Unity cho một python/Gtkứng dụng đơn giản được tạo bằng cách Quicklygọi test; tuy nhiên, làm theo các hướng dẫn trong video này , tôi chưa thể cập nhật thành công thanh tiến trình trong Unitytrình khởi chạy . Trong video Tích hợp Unity, Quicklykhông được sử dụng, do đó cách ứng dụng được cấu trúc hơi khác nhau và mã được sử dụng trong video dường như không hoạt động đúng mà không sửa đổi trong Quickly ubuntu-applicationứng dụng mẫu mặc định .


Ảnh chụp màn hình

Dưới đây là ảnh chụp màn hình của biểu tượng ứng dụng vì nó hiện đang được hiển thị trong Unity Launcher.

Biểu tượng ứng dụng mờ mà không có thanh tiến trình hiển thị

Dưới đây là một ảnh chụp màn hình của loại chức năng thanh tiến trình Unity mà tôi muốn (phủ lên biểu tượng thư: wiki.ub Ubuntu.com ).

Chức năng thanh tiến trình Unity Launcher


Mã số dự án

Một .ziptập tin chứa các tập tin dự án có thể được tìm thấy ở đây .


Hành vi dự kiến

Tôi hy vọng đoạn mã trên sẽ hiển thị thanh tiến trình được phủ đầy 75% trên biểu tượng cho ứng dụng thử nghiệm trong Unity Launcher , nhưng ứng dụng chỉ chạy và hiển thị không có thanh tiến trình khi lệnh quickly runđược thực thi.


Vấn đề điều tra

Tôi tin rằng vấn đề là tôi không nhận được tham chiếu chính xác đến cửa sổ chính của ứng dụng, tuy nhiên, tôi không chắc cách khắc phục vấn đề này đúng cách. Tôi cũng tin rằng dòng: self.launcher = Unity.LauncherEntry.get_for_desktop_id("test.destkop")có thể là một nguồn phức tạp khác vì Quicklytạo .desktop.intệp chứ không phải .desktoptệp thông thường , vì vậy tôi không chắc liệu điều đó có thể gây ra sự cố không.

Có lẽ, một nguồn khác của vấn đề là tôi không hoàn toàn hiểu sự khác biệt giữa .desktop.desktop.incác tệp. Liệu nó có thể làm cho tinh thần để tạo một bản sao của test.desktop.intập tin và đổi tên nó test.desktop, và đặt nó vào /usr/share/applicationsđể cho get_for_desktop_id("test,desktop")để tham khảo chính xác .desktoptập tin?


Liên kết nghiên cứu liên quan

Mặc dù, tôi vẫn chưa rõ về sự khác biệt giữa các tệp .desktop và .desktop.in, tôi đã thực hiện một số nghiên cứu về các tệp .desktop và tôi đã bắt gặp một vài liên kết:


Biên tập

Sau khi chạy python setup.py buildvà sau đó điều hướng đến /build/share/applicationsvà di chuyển test.desktoptệp được xây dựng đến ~/.local/share/applications, và cuối cùng thực thi quickly run, chỉ có một dấu hỏi cho biểu tượng được hiển thị, không có thanh tiến trình hiển thị .

Dấu hỏi cho biểu tượng ứng dụng được hiển thị


Chỉnh sửa 2

Sau khi điều tra thêm về .desktoptệp được xây dựng , hóa ra dòng: Icon=/usr/share/test/media/test.svgtrong .desktoptệp đã trỏ đến một tệp biểu tượng được gọi là test.svgkhông tồn tại.

Để giải quyết vấn đề này, tôi đã tạo một thư mục mới có tên gọi testtrong /usr/share/cách sử dụng lệnh sudo mkdir testvà sau đó tạo ra một thư mục bên trong của thư mục kiểm tra gọi là mediasử dụng lệnh sudo mkdir media, và sau đó tôi chuyển các test.svgtập tin biểu tượng nằm trong thư mục dự án một cách nhanh chóng của tôi tại test/data/media/test.svgđể /usr/share/test/media/. Các .svgbiểu tượng cho ứng dụng bây giờ hiển thị đúng trong thanh launcher Unity và trong giao diện alt-tab, tuy nhiên vẫn còn là thanh tiến trình không thể nhìn thấy như thể hiện trong hình dưới đây.

Chỉ biểu tượng ứng dụng được hiển thị


Chỉnh sửa 3

Như @dobey, đã chỉ ra, có một lỗi đánh máy trong mã của tệp TestWindow.py tại dòng:

self.launcher = Unity.LauncherEntry.get_for_desktop_id("test.destkop"),

nơi test.destkop, nên được test.desktop.

Tôi đã thay đổi lỗi đánh máy này và không có thay đổi có thể nhìn thấy xảy ra khi ứng dụng được thực thi bằng cách sử dụng quickly run. Tuy nhiên, sau khi thêm dòng print('Integrating with launcher')vào add_launcher_integration()không có đầu ra tương ứng trong thiết bị đầu cuối khi ứng dụng được chạy, chỉ ra rằng vấn đề dường như add_launcher_integration()không được gọi là chính xác khi ứng dụng khởi động.


Chỉnh sửa 4

Sau khi điều tra thêm, hóa ra add_launcher_integration()thực tế nó được gọi khi ứng dụng khởi động. Với việc bổ sung dòng:

os.system("clear")

trước dòng

print("Integrating with launcher")

thông báo "Tích hợp với launcher" hiện hiển thị trong terminal.

Tuy nhiên, vẫn không có thanh tiến trình hiển thị trong thanh trình khởi chạy Unity .


Chỉnh sửa 5

Sau khi xây dựng lại Quicklydự án bằng cách thực hiện python setup.py buildvà di chuyển xây dựng .desktoptập tin trong Quicklydự án nằm ở vị trí /build/share/applications/để ~/.local/share/applications, các biểu tượng ứng dụng và thanh tiến trình hiện hiển thị đúng trong Unity launcher bar. Một ảnh chụp màn hình tích hợp launcher có thể được nhìn thấy dưới đây.

Biểu tượng ứng dụng và thanh tiến trình được hiển thị

Câu trả lời:


8

Tệp .desktop phải được cài đặt ở vị trí mà bamfthư viện biết về nó.

Bạn có thể kiểm tra bằng cách sao chép tệp .desktop đã xây dựng (cần được tạo từ .desktop.in) vào ~/.local/share/applicationsthư mục của bạn và chạy update-desktop-database ~/.local/share/applications, mặc dù chạy lệnh này có thể không cần thiết nếu ứng dụng của bạn không xử lý bất kỳ loại MIME nào .

Sự khác biệt giữa .desktop và .desktop.in là .desktop.in được thiết lập để được dịch và được xử lý bởi intltool trong quá trình xây dựng, để chèn các bản dịch, tạo tệp .desktop từ .desktop.in tập tin.

Ngoài ra tôi chỉ nhận thấy một lỗi đánh máy trong mã của bạn:

self.launcher = Unity.LauncherEntry.get_for_desktop_id("test.destkop")

Lưu ý "Destkop" so với "desktop" mà nó nên có. Có lẽ đây là nó, nếu nó không phải là một lỗi gõ lại. Giả sử mã của bạn đang thực sự được chạy, đây là một vấn đề. Nếu nó không chạy, thì đó là vấn đề. Bạn có thể thêm a print('Integrating with launcher')vào hàm add_launcher_integration để xem. Nó sẽ xuất hiện trên thiết bị đầu cuối khi chạy.


Khi tệp được xây dựng .desktop được tạo? Nó được xây dựng khi chạy nhanh được thực thi, và nó nằm ở đâu?
Kevin Gurney

Tôi không sử dụng nhanh chóng và không biết chính xác khi nào nó sẽ xây dựng nó, nhưng thông thường với thư viện / ứng dụng python tiêu chuẩn, sử dụng setup.py với DistUtilsExtra, điều đó sẽ xảy ra khi chạy "./setup.py build" hoặc lệnh setup.py cũng chạy build.
dobey

Tôi đã quản lý để liên tiếp chạy python setup.py build. Vì vậy, bây giờ tôi chỉ cần di chuyển tệp test.desktop vào ~ / .local / share / application và thanh tiến trình sẽ được hiển thị khi tôi chạy nhanh?
Kevin Gurney

Tôi đã xây dựng dự án python và sau đó di chuyển tệp .desktop đã xây dựng sang ~ / usr / share / application và sau đó chạy update-desktop-database ~ / .local / share / application như bạn đề xuất, nhưng bây giờ tôi chỉ nhận được một dấu hỏi cho một biểu tượng ứng dụng như được hiển thị ở đây: i.stack.imgur.com/RWYud.png .
Kevin Gurney

Dòng Icon = trong tệp test.desktop nói lên điều gì?
dobey
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.