Ste*_*zzo 19 indicator python programming gtk pygtk
将任何 gtk.Widget 放入 gtk.Menu 中,在某种程度上,首先将一个空的 gtk.MenuItem 放入。它似乎不可靠 - 但它基本上有效。使用 appindicator.Indicator,它不起作用。该条目只是保持为空。例如,即使您将 child[border_size] 设置为 32。
唯一有效的小部件是 gtk.Label(当然还有 MenuItem、ImageMenuItem 等等)。
现在我的菜单中有一个 gtk.Entry,所以肯定可以正确地做到这一点。我该怎么做?
下面是一些示例代码来解释我在做什么:
self.item = gtk.MenuItem()
self.item.add(gtk.Label("hello world!"))
self.menu.append(self.item)
Run Code Online (Sandbox Code Playgroud)
上面的代码有效,但这不起作用:
self.item = gtk.MenuItem()
self.item.add(gtk.Entry())
self.menu.append(self.item)
Run Code Online (Sandbox Code Playgroud)
self.menu 是一个 appindicator.Indicator,如果它是一个 gtk.Menu,那么至少会显示 Entry。
这是一些工作代码:
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()
Run Code Online (Sandbox Code Playgroud)
Application Indicator 菜单支持基于 D-Bus 菜单,它们支持的内容有限——它们只支持基本的菜单功能,不支持更多奇特的东西,比如任意小部件。
他们支持这些事情的一个重要障碍是,应用程序指示器菜单由不同的进程呈现,应用程序指示器进程,因此您的程序无法直接在其上绘制任何内容。克服这个问题需要在 D-Bus 菜单中支持 X-Embed 之类的东西,或者允许所有 GTK 在 D-Bus 上工作。
| 归档时间: |
|
| 查看次数: |
3408 次 |
| 最近记录: |