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()
'self' là gì? – detly
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