ฉันจะทำให้แถบความคืบหน้าของตัวเรียกใช้ทำงานกับแอปพลิเคชันของฉันได้อย่างไร


10

การวิจัยพื้นหลัง

ฉันกำลังพยายามที่จะปรับปรุงแถบความคืบหน้าในความสามัคคีปล่อยหาง่ายpython/Gtkแอพลิเคชันสร้างขึ้นโดยใช้Quicklyที่เรียกว่าtest; แต่ต่อไปนี้คำแนะนำในวิดีโอนี้ , ฉันยังไม่ได้รับสามารถที่จะประสบความสำเร็จในการปรับปรุงแถบความคืบหน้าในUnityตัวเรียก ในวิดีโอการรวมเข้าด้วยกันQuicklyไม่ได้ใช้ดังนั้นวิธีการที่แอปพลิเคชันมีโครงสร้างแตกต่างกันเล็กน้อยและรหัสที่ใช้ในวิดีโอดูเหมือนจะทำงานไม่ถูกต้องหากไม่มีการแก้ไขในQuickly ubuntu-applicationแอปพลิเคชันแม่แบบเริ่มต้น


ภาพหน้าจอ

นี่คือภาพหน้าจอของไอคอนแอปพลิเคชันซึ่งแสดงอยู่ใน Unity Launcher

ไอคอนแอปพลิเคชันเบลอโดยไม่มีแถบความคืบหน้า

นี่คือภาพหน้าจอของฟังก์ชันความคืบหน้าของแถบตัวเรียกใช้งาน Unity ที่ฉันต้องการ (ซ้อนทับบนไอคอนจดหมาย: wiki.ubuntu.com )

ฟังก์ชันความคืบหน้าของ Unity Launcher


รหัสโครงการ

.zipไฟล์ที่มีไฟล์โครงการที่สามารถพบได้ที่นี่


พฤติกรรมที่คาดหวัง

ฉันคาดหวังว่าโค้ดด้านบนจะแสดงแถบความคืบหน้าที่มีการซ้อนทับ 75% เต็มบนไอคอนสำหรับแอปพลิเคชันทดสอบใน Unity Launcherแต่แอปพลิเคชันจะทำงานและแสดงแถบความคืบหน้าไม่ได้เมื่อดำเนินการคำสั่งquickly runเท่านั้น


การตรวจสอบปัญหา

ฉันเชื่อว่าปัญหาคือว่าฉันไม่ได้รับการอ้างอิงถึงหน้าต่างหลักของแอปพลิเคชันอย่างถูกต้องอย่างไรก็ตามฉันไม่แน่ใจว่าจะแก้ไขปัญหานี้ได้อย่างถูกต้องได้อย่างไร ฉันยังเชื่อด้วยว่าบรรทัด: self.launcher = Unity.LauncherEntry.get_for_desktop_id("test.destkop")อาจเป็นแหล่งที่มาของความยุ่งยากอื่นเนื่องจากQuicklyสร้าง.desktop.inไฟล์มากกว่า.desktopไฟล์ธรรมดาดังนั้นฉันไม่แน่ใจว่ามันอาจทำให้เกิดปัญหาเช่นกัน

บางทีแหล่งที่มาอื่นของปัญหาคือฉันไม่เข้าใจความแตกต่างระหว่าง.desktopและ.desktop.inไฟล์อย่างสมบูรณ์ เป็นไปได้ไหมที่จะทำการคัดลอกtest.desktop.inไฟล์และเปลี่ยนชื่อtest.desktopและวางไว้/usr/share/applicationsเพื่อget_for_desktop_id("test,desktop")อ้างอิง.desktopไฟล์ที่ถูกต้อง?


ลิงค์งานวิจัยที่เกี่ยวข้อง

แม้ว่าฉันยังคงไม่ชัดเจนเกี่ยวกับความแตกต่างระหว่างไฟล์ .desktop และ .desktop.in แต่ฉันได้ทำการค้นคว้าเกี่ยวกับไฟล์ .desktop แล้วและฉันเจอลิงก์สองสามรายการ:


แก้ไข

หลังจากทำงานpython setup.py buildแล้วไปที่/build/share/applicationsและการเคลื่อนย้ายสร้างtest.desktopไฟล์~/.local/share/applicationsและในที่สุดการดำเนินการquickly run, เพียงเครื่องหมายคำถามสำหรับไอคอนจะถูกแสดงโดยไม่มีแถบความคืบหน้ามองเห็นได้

เครื่องหมายคำถามสำหรับไอคอนแอปพลิเคชันปรากฏขึ้น


แก้ไข 2

หลังจากการตรวจสอบเพิ่มเติมของ.desktopไฟล์ที่สร้างขึ้นปรากฎว่าบรรทัด: Icon=/usr/share/test/media/test.svgภายใน.desktopไฟล์นั้นชี้ไปที่ไฟล์ไอคอนที่เรียกว่าtest.svgไม่มีอยู่

เพื่อที่จะแก้ไขปัญหานี้ผมสร้างโฟลเดอร์ใหม่ที่เรียกว่าtestใน/usr/share/การใช้คำสั่งsudo mkdir testและสร้างขึ้นภายในโฟลเดอร์อื่นของโฟลเดอร์การทดสอบจากนั้นก็เรียกmediaใช้คำสั่งsudo mkdir mediaและจากนั้นผมย้ายtest.svgไฟล์ไอคอนอยู่ในไดเรกทอรีโครงการของฉันได้อย่างรวดเร็วที่จะtest/data/media/test.svg ไอคอนสำหรับการใช้งานในขณะนี้แสดงอย่างถูกต้องในแถบปล่อยความสามัคคีและในมุมมอง Alt-แท็บ แต่ยังคงมีแถบความคืบหน้าไม่สามารถมองเห็นได้ตามที่แสดงในภาพด้านล่าง/usr/share/test/media/.svg

ไอคอนแอปพลิเคชันเท่านั้นที่แสดง


แก้ไข 3

ในฐานะที่เป็น @dobey ชี้ให้เห็นว่ามีการพิมพ์ผิดในรหัสของไฟล์ TestWindow.py ที่บรรทัด:

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

ที่ควรจะเป็นtest.destkoptest.desktop

ผมเปลี่ยน typo quickly runนี้และไม่มีการเปลี่ยนแปลงที่เกิดขึ้นสามารถมองเห็นได้เมื่อโปรแกรมประยุกต์ที่ถูกประหารชีวิตโดยใช้ อย่างไรก็ตามหลังจากเพิ่มบรรทัดprint('Integrating with launcher')ไปadd_launcher_integration()ยังไม่มีเอาต์พุตที่สอดคล้องกันในเทอร์มินัลเมื่อเรียกใช้แอปพลิเคชันแสดงว่าปัญหาดูเหมือนว่าadd_launcher_integration()จะไม่ถูกเรียกอย่างถูกต้องเมื่อเริ่มต้นแอปพลิเคชัน


แก้ไข 4

หลังจากการตรวจสอบเพิ่มเติมปรากฎว่าadd_launcher_integration()ในความเป็นจริงเรียกว่าเมื่อแอปพลิเคชันเริ่มต้น ด้วยการเพิ่มบรรทัด:

os.system("clear")

ก่อนที่จะมีสาย

print("Integrating with launcher")

ข้อความ "การบูรณาการกับการปล่อย" terminalตอนนี้การแสดงใน

อย่างไรก็ตามยังคงมีไม่มีความคืบหน้าบาร์ visisble ในแถบปล่อยสามัคคี


แก้ไข 5

หลังจากที่สร้างใหม่Quicklyโครงการโดยการดำเนินการpython setup.py buildและการเคลื่อนย้ายสร้าง.desktopไฟล์ภายในQuicklyโครงการตั้งอยู่ที่/build/share/applications/ไป~/.local/share/applicationsที่ไอคอนของโปรแกรมประยุกต์และแถบความคืบหน้าในขณะนี้แสดงอย่างถูกต้องในแถบปล่อยสามัคคี ภาพหน้าจอของการรวมตัวเรียกใช้สามารถดูได้จากด้านล่าง

ไอคอนแอปพลิเคชันและแถบความคืบหน้าปรากฏขึ้น

คำตอบ:


8

ไฟล์ .desktop ต้องถูกติดตั้งในตำแหน่งที่bamfไลบรารีรู้

คุณควรจะสามารถทดสอบได้โดยการคัดลอกไฟล์ .desktop ที่สร้างขึ้น (ซึ่งควรสร้างจาก .desktop.in) ลงใน~/.local/share/applicationsโฟลเดอร์ของคุณและเรียกใช้update-desktop-database ~/.local/share/applicationsแม้ว่าการเรียกใช้คำสั่งนี้อาจไม่จำเป็นถ้าแอปพลิเคชันของคุณไม่รองรับประเภท MIME ใด ๆ .

ความแตกต่างระหว่าง .desktop และ .desktop.in คือ .desktop.in ถูกตั้งค่าสำหรับการแปลและถูกประมวลผลโดย intltool ในระหว่างการสร้างเพื่อให้มีการแทรกการแปลเพื่อสร้างไฟล์ .desktop จาก. desktop.in ไฟล์.

นอกจากนี้ฉันเพิ่งสังเกตเห็นการพิมพ์ผิดในรหัสของคุณ:

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

สังเกตว่า "destkop" กับ "เดสก์ท็อป" ว่าควรเป็นอย่างไร บางทีนี่อาจเป็นเพราะมันไม่ใช่ข้อผิดพลาดในการพิมพ์ซ้ำ สมมติว่ารหัสของคุณกำลังทำงานจริงนี่เป็นปัญหา หากไม่ได้ทำงานแสดงว่าเป็นปัญหา คุณสามารถเพิ่ม a print('Integrating with launcher')ไปยังฟังก์ชัน add_launcher_integration เพื่อดู มันควรจะปรากฏบน terminal เมื่อทำงาน


ไฟล์ .desktop ในตัวถูกสร้างขึ้นเมื่อใด มันสร้างขึ้นเมื่อมีการรันอย่างรวดเร็วหรือไม่และอยู่ที่ไหน?
Kevin Gurney

ฉันไม่ได้ใช้อย่างรวดเร็วและไม่รู้ว่าเมื่อไหร่มันจะสร้างมัน แต่โดยปกติแล้วจะมีไลบรารี / แอปพลิเคชันหลามแบบมาตรฐานโดยใช้ setup.py ด้วย DistUtilsExtra มันจะเกิดขึ้นเมื่อเรียกใช้ "./setup.py build" หรือ คำสั่ง setup.py ซึ่งใช้งานบิลด์ด้วย
dobey

ฉันจัดการเพื่อรัน python setup.py build อย่างต่อเนื่อง ดังนั้นตอนนี้ฉันเพียงแค่ย้ายไฟล์ test.desktop ไปที่ ~ / .local / share / applications และแถบความคืบหน้าควรจะปรากฏขึ้นเมื่อฉันรันอย่างรวดเร็ว?
Kevin Gurney

ฉันสร้างโครงการหลามจากนั้นย้ายไฟล์ .desktop ที่สร้างขึ้นไปที่ ~ / usr / share / applications จากนั้นเรียกใช้ update-desktop-database ~ / .local / share / applications อย่างที่คุณแนะนำ แต่ตอนนี้ฉันเพิ่งได้รับเครื่องหมายคำถาม สำหรับไอคอนโปรแกรมดังที่แสดงไว้ที่นี่: i.stack.imgur.com/RWYud.png
Kevin Gurney

บรรทัด Icon = ในไฟล์ test.desktop พูดว่าอะไร
dobey
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.