我知道这很简单,只需使用命令self.set_icon_from_file("icon.png")
,但我的程序仍然不显示图标。我确保icon.png与Python文件位于同一个工作目录中。我也试过提供完整的文件路径,但它仍然没有显示图标。
如果有帮助并使用Python V2.6,我正在使用Ubuntu 10.10。我使用Glade Interface Designer来设计GUI。但是,我尝试使用Glade并使用上面的命令设置图标。
我希望我提供了足够的信息。
编辑:我的状态图标可以在我的程序中运行..但问题中我的意思是程序图标显示在任务栏中,也显示在应用程序栏的左侧。 / p>
答案 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)