在Python GTK中添加程序图标

Nik*_*Nik 9 python ubuntu

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

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

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

编辑:我有状态图标在我的程序中工作..但在问题中我的意思是程序图标显示在任务栏中,也在应用程序栏的左侧.

det*_*tly 8

我确保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
Run Code Online (Sandbox Code Playgroud)

我实际上并不是那么冗长,但希望变量名称可以清楚地表明发生了什么.此外,获取绝对路径并非绝对必要,但如果需要调试可能会有所帮助.

然后你可以这样做:

self.set_icon_from_file(get_resource_path("icon.png"))
Run Code Online (Sandbox Code Playgroud)

更新:这是一个演示程序."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()
Run Code Online (Sandbox Code Playgroud)