2010-12-11 32 views
6

Tôi biết điều này rất đơn giản, chỉ cần sử dụng lệnh self.set_icon_from_file("icon.png"), tuy nhiên chương trình của tôi vẫn không hiển thị biểu tượng. Tôi đã chắc chắn rằng icon.png nằm trong cùng thư mục làm việc với tệp Python. Tôi cũng đã thử đưa đường dẫn tệp hoàn chỉnh, nhưng nó vẫn không hiển thị biểu tượng.Thêm biểu tượng chương trình bằng Python GTK

Tôi đang sử dụng Ubuntu 10.10 nếu điều đó giúp và sử dụng Python V2.6. Tôi sử dụng Glade Interface Designer để thiết kế GUI. Tuy nhiên, tôi đã thử thiết lập biểu tượng cả bằng cách sử dụng Glade và sử dụng lệnh trên.

Tôi hy vọng tôi đã cung cấp đủ thông tin.

CHỈNH SỬA: Tôi nhận biểu tượng trạng thái hoạt động trong chương trình của mình .. Tuy nhiên, câu hỏi có nghĩa là biểu tượng chương trình được hiển thị trên thanh tác vụ và ở bên trái thanh ứng dụng.

+0

'self' là gì? – detly

+0

Tôi yêu cầu thiết lập biểu tượng chương trình của cửa sổ hiện tại bằng cách sử dụng "tự" – Nik

Trả lời

6

Tôi đảm bảo biểu tượng.png nằm trong cùng thư mục làm việc của tệp python.

Đây có thể là vấn đề của bạn - đường dẫn được tra cứu liên quan đến thư mục hoạt động của thông dịch viên Python, chứ không phải tệp chứa mã. Tôi thường thấy mình xác định một chức năng như:

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 

Tôi không thực sự khá là tiết, nhưng hy vọng tên biến sẽ làm rõ điều gì đang diễn ra. Ngoài ra, việc nhận đường dẫn tuyệt đối không thực sự cần thiết, nhưng có thể hữu ích nếu bạn cần gỡ lỗi.

Sau đó, bạn chỉ có thể làm:

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

Cập nhật: Dưới đây là một chương trình demo. "icon.png" nằm trong cùng thư mục với tập lệnh này và tôi chạy nó bằng cách sử dụng ./gtktest.py. Tôi thấy biểu tượng ở góc trên cùng bên trái (vị trí tiêu chuẩn cho chủ đề của tôi). icon.png chỉ là một hình vẽ trong Inkscape và được xuất dưới dạng bitmap (nó cũng hoạt động với SVG gốc).

#!/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

Không, nó không hoạt động. Vấn đề là khi tôi thử hình ảnh biểu tượng trạng thái, tôi chỉ cung cấp cho filepath như tên hình ảnh và nó hoạt động hoàn hảo. Nó chỉ là với biểu tượng chương trình nó không. Tôi đã thử đưa toàn bộ tên đường dẫn ngay từ gốc. Vẫn không thể làm cho nó hoạt động. – Nik

+0

Tôi nghĩ rằng tôi có một số mã mẫu tại nơi làm việc, vì vậy tôi sẽ cắt nó xuống và đăng nó vào ngày mai. – detly

+0

@Nik - đăng một số mã trình diễn - cho tôi biết nếu nó hoạt động cho bạn. – detly

2

Tôi không chắc chắn những gì biểu tượng bạn đang tạo, nhưng cố gắng PyGTK này biểu tượng-hiển thị ví dụ nhỏ nhất của biểu tượng trên thanh tác vụ Tôi đã nghĩ đến việc:

#!/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() 

Có lẽ bạn chỉ cần bỏ qua lệnh statusIcon.set_visible(True)

+0

Tại sao bạn lại nói về biểu tượng khay hệ thống? – detly

+1

Bởi vì bạn không chỉ định biểu tượng nào bạn có trong đầu và tôi muốn giúp bạn. Ví dụ của tôi là biểu tượng cho thanh tác vụ hệ thống. Hy vọng nó đã giúp. –

0

Đối với biểu tượng chuẩn, sử dụng stock items và tìm các biểu tượng phù hợp với nhu cầu của bạn. cách mà

  • Bạn không cần phải đóng gói biểu tượng hộ chương trình của bạn
  • Các biểu tượng thay đổi theo chủ đề của người dùng và sẽ được pha trộn độc đáo trong môi trường cô.

cho PyGTK:

gtk.icon_theme_get_default().load_icon("folder-open", 128, 0) 
Các vấn đề liên quan