我目前正在编写一个需要使用gtk.StatusIcon()
. 出于某种原因,我得到了一些奇怪的行为。如果我进入 python 交互式 shell 并输入:
>> import gtk
>> statusIcon = gtk.status_icon_new_from_file("img/lin_idle.png")
Pygtk 完全按照它应该做的,并在系统托盘中显示一个图标 (lin_idle.png):
但是,如果我尝试在我的脚本中执行相同的任务:
def gtkInit(自我): self.statusIcon = gtk.status_icon_new_from_file("img/lin_idle.png")
当gtkInit()
被调用时,我看到的是:
我让我在与交互式 python shell 相同的工作目录中运行脚本,所以我很确定它正在找到图像,所以我很难过......有人有什么想法吗?提前致谢。
更新:出于某种原因,gtk.status_icon_new_from_file()
在脚本中调用了几次之后,它最终确实创建了图标,但不幸的是,这个问题仍然存在。有没有人对可能出现的问题有任何想法?
根据要求:这是完整的脚本。这实际上是一个我处于早期制作阶段的应用程序,但如果你正确设置它,它现在确实可以工作,所以如果你愿意,可以随意使用它(也帮助我!),您只需要获取一个 imgur 开发者密钥并将其放入linup_control.py
Linup.py
# # Linup - Linux 的 Dropbox 替代品! # 由 Nakedsteve 撰写 # 在 MIT 许可下发布 # 导入操作系统 进口时间 导入配置解析器 从 linup_control 导入 Linup cfg = ConfigParser.RawConfigParser() # 看看我们是否有一个 .linuprc 文件 home = os.path.expanduser("~") 如果不是 os.path.exists(home+"/.linuprc"): # 不,所以让我们做一个 cfg.add_section("路径") cfg.set("paths","watch_path", home+"/Desktop/screenshot1.png") # 现在将其写入文件 使用 open(home+"/.linuprc","wb") 作为配置文件: cfg.write(配置文件) 别的: cfg.read(home+"/.linuprc") linup = Linup() # 创建 GUI(状态图标、菜单等) linup.gtkInit() # 进入主循环,我们检查是否有要上传的镜头 # 每 1 秒 path = cfg.get("paths","watch_path") 而1: 如果(os.path.exists(路径)): linup.uploadImage(路径) url = linup.getURL() linup.toClipboard(url) linup.json = "" print "截图上传!" os.remove(路径) 别的: # 如果你想知道我为什么使用 time.sleep() # 因为我发现没有它,我的 CPU 还在 # 在运行 linup 时始终保持 50%。如果你有更好的 # 方法,请联系我(我对python比较陌生) 时间.sleep(1)
linup_control.py
导入gtk 导入json 进口时间 导入 pycurl 导入操作系统 班级阵容: def __init__(self): 自我.json = "" def 上传图像(自我,路径): # 设置状态图标为忙 self.statusIcon.set_from_file("img/lin_busy.png") # 创建新的 pycurl 实例 cu = pycurl.Curl() # 将 POST 变量设置为 image 和 dev 键 值 = [ (“钥匙”,”*************”), (“图像”,(cu.FORM_FILE,路径)) ] # 设置发送地址 cu.setopt(cu.URL, "http://imgur.com/api/upload.json") # 这让我们得到 imgur 返回的 json cu.setopt(cu.WRITEFUNCTION,self.resp_callback) cu.setopt(cu.HTTPPOST, vals) # 做吧! cu.perform() cu.close() # 将状态图标设置为完成... self.statusIcon.set_from_file("img/lin_done.png") # 等待 3 秒 时间.sleep(3) # 设置图标为空闲 self.statusIcon.set_from_file("img/lin_idle.png") # 用于从 imgur 获取响应 json def resp_callback(self, buff): self.json += buff # 从json数据中提取图片URL def getURL(自我): js = json.loads(self.json) 返回 js['rsp']['image']['original_image'] # 将文本变量插入剪贴板 def toClipboard(self, text): cb = gtk.Clipboard() cb.set_text(文本) cb.store() # 启动 Linup 的 GUI 元素 def gtkInit(自我): self.statusIcon = gtk.StatusIcon() self.statusIcon.set_from_file("img/lin_idle.png")