在Python GTK中添加程序图标

时间:2010-12-11 10:44:13

标签: python ubuntu

我知道这很简单,只需使用命令self.set_icon_from_file("icon.png"),但我的程序仍然不显示图标。我确保icon.png与Python文件位于同一个工作目录中。我也试过提供完整的文件路径,但它仍然没有显示图标。

如果有帮助并使用Python V2.6,我正在使用Ubuntu 10.10。我使用Glade Interface Designer来设计GUI。但是,我尝试使用Glade并使用上面的命令设置图标。

我希望我提供了足够的信息。

编辑:我的状态图标可以在我的程序中运行..但问题中我的意思是程序图标显示在任务栏中,也显示在应用程序栏的左侧。 / p>

3 个答案:

答案 0 :(得分:7)

  

我确定icon.png位于python文件的同一个工作目录中。

这可能是您的问题 - 相对于Python 解释器的工作目录查找路径,而不是包含代码的文件。我经常发现自己定义了一个函数:

def get_resource_path(rel_path):
    dir_of_py_file = os.path.dirname(__file__)
    rel_path_to_resource = os.path.join(dir_of_py_file, rel_path)
    abs_path_to_resource = os.path.abspath(rel_path_to_resource)
    return abs_path_to_resource
我实际上并不是那么冗长,但希望变量名称可以清楚地表明发生了什么。此外,获取绝对路径并非绝对必要,但如果需要调试则可能会有所帮助。

然后你可以这样做:

self.set_icon_from_file(get_resource_path("icon.png"))

更新:这是一个演示程序。 “icon.png”与此脚本位于同一目录中,我使用./gtktest.py运行它。我在左上角看到了图标(我主题的标准位置)。 icon.png只是在Inkscape中绘制的形状,并作为位图导出(无论如何,它也与原始SVG一起使用)。

#!/usr/bin/env python
import pygtk
pygtk.require('2.0')
import gtk

class HelloWorld:

    def delete_event(self, widget, event, data=None):
        return False

    def destroy(self, widget, data=None):
        gtk.main_quit()

    def __init__(self):
        # create a new window
        self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)

        self.window.set_icon_from_file('icon.png')

        self.window.connect("delete_event", self.delete_event)
        self.window.connect("destroy", self.destroy)

        # Creates a new button with the label "Hello World".
        self.button = gtk.Button("Hello World")

        self.window.add(self.button)
        self.button.show()
        self.window.show()

    def main(self):
        gtk.main()

if __name__ == "__main__":
    hello = HelloWorld()
    hello.main()

答案 1 :(得分:2)

我不确定你正在创建什么图标,但试试这个最小的PyGTK图标 - 显示任务栏图标的例子我想到了:

#!/usr/bin/env python
import pygtk
pygtk.require('2.0')
import gtk

# create icon object
statusIcon = gtk.StatusIcon()

# load it
statusIcon.set_from_file("icon.ico")

# show it
statusIcon.set_visible(True)

# and run main gtk loop
gtk.main()

也许你错过了命令statusIcon.set_visible(True)

答案 2 :(得分:0)

对于标准图标,请使用stock items,并找到符合您需求的图标。那样

  • 您不必打包程序中的图标
  • 图标发生变化 根据用户的主题,并将很好地融入她的 环境。

for pyGTK:

gtk.icon_theme_get_default().load_icon("folder-open", 128, 0)