2010-12-11 50 views
6

我知道這很簡單,只需使用命令self.set_icon_from_file("icon.png"),但是我的程序仍然不顯示圖標。我確保icon.png與Python文件位於相同的工作目錄中。我也嘗試給出完整的文件路徑,但它仍然不顯示圖標。在Python中添加程序圖標GTK

我使用的是Ubuntu 10.10,如果有幫助和使用Python V2.6。我使用Glade Interface Designer來設計GUI。不過,我嘗試使用Glade並使用上面的命令設置圖標。

我希望我已經提供了足夠的信息。

編輯:我得到了狀態圖標在我的程序中工作..但是在問題中,我的意思是任務欄中顯示的程序圖標以及應用程序欄的左側。

+0

什麼是'self'? – detly 2010-12-11 10:54:49

+0

我要求它使用「self」來設置當前窗口的程序圖標 – Nik 2010-12-11 11:06:45

回答

6

我確信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() 
+0

不,它不起作用。問題是,當我嘗試狀態圖標圖像時,我只是將文件路徑作爲圖像名稱,並且完美地工作。這只是與它沒有的程序圖標。我試着從根開始給出整個路徑名。仍然不能得到它的工作。 – Nik 2010-12-14 14:18:19

+0

我想我在工作中有一些示例代碼,所以我會盡量減少並明天發佈。 – detly 2010-12-14 14:25:05

+0

@Nik - 發佈了一些演示代碼 - 告訴我它是否適合你。 – detly 2010-12-15 02:37:09

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)

+0

爲什麼你在討論系統托盤圖標? – detly 2010-12-11 13:47:08

+1

因爲您沒有指定您想要的圖標,我想幫助您。我的例子是系統任務欄的圖標。希望它有幫助。 – 2010-12-11 15:57:07

0

對於標準圖標,請使用stock items,並找到適合您需要的圖標。這樣

  • 你不必收拾圖標蒙山程序
  • 的圖標根據用戶的主題改變 並會在她 環境很好地融爲一體。

用於PyGTK的:

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