วาง gtk โดยพลการเข้าไปใน appindicator.Indicator


18

วาง gtk ใด ๆ เข้าไปใน gtk.Menu แล้วทำงานโดยใส่ gtk.MenuItem ที่ว่างไว้ก่อน ดูเหมือนจะไม่น่าเชื่อถือ - แต่ใช้งานได้จริง ด้วย appindicator ตัวบ่งชี้มันไม่ทำงาน รายการเพิ่งจะว่างเปล่า แม้ว่าคุณจะตั้งค่าเด็ก [border_size] เป็น 32

วิดเจ็ตเดียวที่ใช้งานได้คือ gtk.Label (รวมถึง MenuItem, ImageMenuItem และอื่น ๆ )

ตอนนี้เมนูของฉันได้รับ gtk ลองใหม่ดังนั้นมันจะต้องเป็นไปได้ที่จะทำอย่างถูกต้อง ฉันต้องทำอย่างไร?

นี่คือตัวอย่างโค้ดที่จะอธิบายสิ่งที่ฉันกำลังทำ:

    self.item = gtk.MenuItem()
    self.item.add(gtk.Label("hello world!"))
    self.menu.append(self.item)

โค้ดข้างต้นใช้งานได้ แต่ไม่ได้:

    self.item = gtk.MenuItem()
    self.item.add(gtk.Entry())
    self.menu.append(self.item)

โดยที่ self.menu เป็นตัวบ่งชี้ตัวบ่งชี้ถ้าเป็น gtk.Menu รายการนั้นจะแสดงขึ้นอย่างน้อย

นี่คือรหัสการทำงานบางส่วน:

import gtk
import appindicator

class AppIndicator (object):

    def __init__(self):
        self.ind = appindicator.Indicator("hello world client",
            "distributor-logo", appindicator.CATEGORY_APPLICATION_STATUS)
        self.ind.set_status (appindicator.STATUS_ACTIVE)
        self.menu = gtk.Menu()
        item = gtk.MenuItem()

        item.add(gtk.Label("hello world"))
        # item.add(gtk.Entry())

        self.menu.append(item)
        self.menu.show_all()
        self.ind.set_menu(self.menu)


indicator = AppIndicator()
gtk.main()

@MarcoCeppi เตือนฉันว่าใช่ - สิ่งนี้ไม่ควรใช้ ฉันแค่หวังและฝันว่ามันอาจจะเป็นไปได้ เนื่องจากเมนูของฉันทำสิ่งที่ดูเหมือนคล้ายกัน
Stefano Palazzo

1
ฉันค่อนข้างแน่ใจว่าเมนูของฉันใช้ประโยชน์จากความใคร่ (ตัวชี้วัดการแสดงผล) เพื่อทำสิ่งนั้น ดู: launchpad.net/idoโดยเฉพาะ idoentrymenuitem.c ( bazaar.launchpad.net/~canonical-dx-team/ido/trunk/annotate/ … ) น่าเสียดายที่ฉันไม่คิดว่ามีการผูกหลาม คุณอาจต้องการสอบถามเกี่ยวกับรายการอีเมล ayatana-dev
andrewsomething

คุณรู้วิธีการทำเช่นนี้? ฉันกำลังเผชิญกับปัญหาเดียวกัน ขอบคุณ
Benjamin

คำตอบ:


7

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

สิ่งกีดขวางบนถนนที่สำคัญอย่างหนึ่งสำหรับพวกเขาที่เคยสนับสนุนสิ่งนี้คือข้อเท็จจริงที่ว่าเมนูตัวบ่งชี้แอปพลิเคชันแสดงผลโดยกระบวนการที่แตกต่างกันกระบวนการตัวบ่งชี้แอปพลิเคชันเพื่อให้โปรแกรมของคุณไม่สามารถเข้าถึง การเอาชนะสิ่งนี้จะต้องมีการสนับสนุนอะไรบางอย่างเช่น X-Embed ในเมนู D-Bus หรือทำให้ GTK ทั้งหมดทำงานผ่าน D-Bus ได้


2

ตัวบ่งชี้เสียงใน Ubuntu มีตัวเลื่อนระดับเสียงและฉันสงสัยว่ามันเป็นไปได้อย่างไร หลังจากดูในรหัสดูเหมือนว่ามี GtkMenus ซึ่งสามารถกรอกผ่าน dbus ในขณะเดียวกัน: https://developer.ubuntu.com/api/devel/ubuntu-12.04/c/dbusmenugtk/index.html

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

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