我正在用 Python 为 Ubuntu Budgie 编写一个小程序。我写了一些代码,调试时没有错误,保存了它并将包含文件的文件夹放在 ~/.local/share/budgie-desktop/plugin 目录中,这样我就可以将其添加到面板上。我尝试将其添加为一个小程序,但什么也没发生。所以我不确定它是否运行顺利。代码在这个链接中
https://gist.github.com/cgiannakidis70/db0cf31558e6c20e95716679b831fd8f
#!/usr/bin/env python3
import os
import gi
import gi.repository
gi.require_version('Budgie', '1.0')
from gi.repository import Budgie, GObject, Gtk, Gio
class myapplet(GObject.GObject, Budgie.Plugin):
__gtype_name__ = "myapplet"
def __int__(self):
GObject.GObject.__init__(self)
def do_get_panel_widged(self, uuid):
return myappletApplet(uuid)
class myappletApplet(Budgie.Applet):
def __init__(self, uuid):
Budgie.Applet.__init__(self)
self.button = Gtk.ToggleButton.new("A")
self.button.set_relief(Gtk.ReliefStyle.NONE)
self.button.set_active(False)
self.button.set_tooltip_text("Apple Menu")
self.add(self.button)
self.button.connect("clicked", self.button_clicked)
self.show_all()
def button_clicked(self):
dialog = menu(self)
response = dialog.run()
dialog.destroy()
#Create Menu
menu = Gio.Menu()
menu.append("About This PC", "app.about_this_pc")
self.set_applet_menu(menu)
#create an action for the option "About This PC" of the menu
about_this_pc_action = Gio.SimpleAction.new("about_this_pc", None)
about_this_pc_action.connect("activate", self.about_this_pc_cb)
self.add_action(about_this_pc_action)
def about_this_pc_cb(self, action, parameter):
print("About This PC")
Gtk.main()
该小程序是关于面板上的一个按钮,每次我按下它时都会打开一个下拉菜单,其中有一些可以激活的选项,就像“用户指示器小程序”一样。
现在我被堆满了,无法继续写代码。任何帮助我都会很感激。提前谢谢。
答案1
我发现一个打字错误!
def do_get_panel_widged(self, uuid):
它应该是:
def do_get_panel_widget(self, uuid):
实际情况是,拼写错误版本只是定义了一个函数。虽然隐式调用了 do_get_panel_widget,但它是一个存根函数,因此小程序永远不会出现。
使用正确的名称 - 您现在可以覆盖内置的存根函数并调用新的小程序代码。
其次,在您的示例中,您缺少 .plugin 文件 - 您需要此文件才能运行模块。插件文件的格式如下:
[Plugin]
Loader=python3
Module=test
Name=test
Description=test description
Authors=your name
Copyright=© 2018 email address
Website=https://your-website.com
Icon=we-prefer-symbolic-icons-symbolic
第三:
主模块末尾不要有 Gtk.main() - 这只会混淆基于 Peas 的插件 - 删除它
第四:
使用 Gtk.EventBox() 添加您的小程序 - 这是 budgie-desktop 10.4 插件现在应该编写的方式 - 示例代码如下
self.button = Gtk.ToggleButton.new()
self.button.set_relief(Gtk.ReliefStyle.NONE)
self.button.set_active(False)
self.button.set_tooltip_text("Apple Menu")
box = Gtk.EventBox()
box.add(self.button)
self.add(box)
self.button.connect("clicked", self.button_clicked)
box.show_all()
self.show_all()
def button_clicked(self, *args):
第五:
注意 button_clicked 事件缺少一个参数 - GTK 中的点击事件将按钮本身传递给信号处理程序
最后 - 我还没有帮您更正 - 您单击的函数有一个未初始化的对话框 - 而您似乎想要显示一个 Gtk 对话框。不要!您将阻止面板的主线程。