การใช้ Gtk.Widgets ใน App Indicators กับ Python


44

ในปี 2010 สเตฟาโน Palazzo, ถามคำถามที่เกี่ยวข้องกับการนำ gtk.Widget พลเป็น appindicator.Indicatorและคล้ายหนึ่งถูกถามในStackOverflow ในทั้งสองกรณีฉันทามติว่าตัวบ่งชี้แอพของ Ubuntu มี จำกัด ดังที่ Michael Ekstrand กล่าวไว้:

การสนับสนุนเมนูตัวบ่งชี้แอปพลิเคชันขึ้นอยู่กับเมนู D-Bus ซึ่งมีข้อ จำกัด ในสิ่งที่รองรับ - สนับสนุนเฉพาะฟังก์ชันการทำงานเมนูพื้นฐานเท่านั้นไม่ใช่สิ่งแปลกใหม่เช่นวิดเจ็ตโดยพลการ

อย่างไรก็ตามมันขัดแย้งกับสิ่งที่เราเห็นในตัวบ่งชี้บลูทู ธ ในวันนี้ในปี 2559: มันใช้สวิตช์สลับ

ป้อนคำอธิบายรูปภาพที่นี่

เดียวกันสามารถสังเกตได้ด้วยตัวบ่งชี้ Ubuntu หนึ่งจาก 13.04:

ป้อนคำอธิบายรูปภาพที่นี่

เห็นได้ชัดว่ามีวิธี ฉันได้ศึกษาซอร์สโค้ดตัวบ่งชี้บลูทู ธ แล้ว แต่มันเขียนใน Vala อย่างไรก็ตามฉันทำงานเป็นหลักในไพ ธ อนและการเรียนรู้วาลาเพียงเพื่อเขียนตัวบ่งชี้ที่มีอยู่ทั้งหมดของฉันแล้วก็ทำงานได้มากเกินไป

ดังนั้นแกนกลางของคำถาม: เราจะใช้ Gtk.Widgets ได้อย่างไรหรืออย่างน้อยที่สุดสวิตช์สลับเช่นเดียวกับในตัวบ่งชี้บลูทู ธ โดยใช้ Python?

หมายเหตุ : ฉันยินดีที่จะนำเงินรางวัลกับคำถามนี้คำตอบที่จะให้รางวัลซึ่งจะให้เป็นตัวอย่างที่ทำงานสำรวจในหลาม ไม่รับภาษาอื่น


6
ตัวบ่งชี้แอปพลิเคชั่นมีข้อ จำกัด แม้จะไม่รองรับไอคอนแบบทันที (มันแค่โหลดไฟล์ภาพจากระบบไฟล์) ตัวบ่งชี้เหล่านั้นที่คุณพูดถึงคือตัวบ่งชี้ระบบ (บลูทู ธ , อูบุนตูหนึ่ง, เสียง, กำลัง, ... ) พวกเขาแตกต่างกันและพวกเขาไม่ได้ใช้ libappindicator ฉันได้โพสต์โพสต์ไปแล้วสองสามข้อซึ่งอาจช่วยชี้แจงความแตกต่างได้ ฉันมีตัวบ่งชี้ระบบทำงานโดยใช้ C. แต่ในหลามฉันยังคงดิ้นรน
user.dz

2
มีวิธีใดที่ดึงดูดความสนใจของผู้พัฒนา Ubuntu หลักสำหรับคำถามนี้หรือไม่?
don.joey

1
อย่างน้อยtest = Gtk.CheckMenuItem("Monkey")ทำงานเพิ่มปุ่มกด แต่ควรมีมากขึ้น ขณะที่สิ่งนี้ใช้ได้ผลสิ่งนี้ควรใช้งานได้ แต่ไม่ทำงาน: Gtk.CheckMenuItemToggled("Monkey"). ฉันค่อนข้างมั่นใจว่ามันสามารถทำงานได้ แต่อย่างใด ดู: developer.gnome.org/gtk3/stable/GtkCheckMenuItem.html
Jacob Vlijm

1
@JacobVlijm ใช่เพิ่มงาน menuitem ใด ๆ มันยังทำงานเพื่อเพิ่ม Gtk.Box และเพิ่ม Gtk.Label ไปที่กล่อง แต่ไม่มีอะไรอื่น (มันบอกว่าเครื่องมือสามารถมีเพียงหนึ่งรายการ
Sergiy Kolodyazhnyy

1
Gtk.ImageMenuItemจะเลิกและกำลังใจที่จะใช้ครับ: developer.gnome.org/gtkmm/stable/deprecated.html
จาค็อบ Vlijm

คำตอบ:


1

ปัญหานี้เกิดขึ้นเพราะในขณะที่ AppIndicators ทำให้การสร้างเมนูตัวบ่งชี้ง่ายขึ้น เรามาดูความแตกต่างระหว่างโค้ดไพ ธ อนตัวอย่างโดยใช้ AppIndicator และอีกอันโดยใช้ GLib Menus วิธีที่รหัสบลูทู ธ ทำ

ประการแรกคุณได้รับคำแนะนำให้สร้างสิ่งgtk.Menuเหล่านี้เป็นวัตถุเมนู Gtk แบบเก่าที่ใช้Gtk.Actionซึ่งเลิกใช้แล้ว AppIndicator เตะgtk.Menuวัตถุจากคุณในระหว่างกระบวนการและการแยกวิเคราะห์มันผลักดันให้แต่ละเมนูที่พบบนบริการตัวบ่งชี้สร้างขึ้นโดยใช้set_menu(...) libdbusmenuกระบวนการแยกวิเคราะห์นี้หมายความว่าทุกอย่างที่ AppIndicator ไม่รองรับจะถูกกรองออกไม่ว่าคุณจะทำอะไรก็ตาม

ต่อไปมาดูเมนูบลูทู ธ กัน ที่สร้างขึ้นโดยใช้Gio.Menuวัตถุเหล่านี้เป็นเมนู Gnome สไตล์ใหม่ที่ใช้GActionระบบ จากนั้นจะลงทะเบียนเป็นบริการของตัวเองโดยไม่ต้องใช้AppIndicatorหรือlibdbusmenuตั้งค่าให้มันใช้x-canonical-typeคุณสมบัติที่กำหนดเองเพื่อสร้างวิดเจ็ตสวิทช์ที่ถูกส่งไปยังlibidoการแยกวิเคราะห์

แบบฝึกหัดทั้งหมดนี้ค่อนข้างไม่ดีนักเนื่องจากมันเป็นการปรับแต่ง Unity ของ Canonical เอง ดังนั้นทันทีที่ความสามัคคีเกิดขึ้น

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