【发布时间】:2016-03-14 07:47:03
【问题描述】:
我用 Python 为自己开发了一个小小的壁纸更改应用程序。它在通知托盘中制作了一个图标,可用于根据周围的人在“nice”和“naughty”之间切换模式:P并强制更换壁纸。如果不理会,它仍然每 10 分钟更改一次随机壁纸,从我不断添加到的充满图像的目录中随机选择。一切都很好,直到我从 Ubuntu 14.04“Trusty”升级到 Ubuntu 15.10“Wily”。现在,该应用程序仍然运行,并且会按照应有的方式每 10 分钟更换一次壁纸,但图标不见了。它在托盘中为图标创建了一个 空格,但图标不再出现在其中,空格也不会响应任何鼠标左键或右键单击(左键单击用于强制更改壁纸,右键单击用于给我两种模式的菜单)。运行应用程序时,控制台上不会出现警告或错误消息。我对 Python 不太熟悉,也不知道到底是什么问题。以下是小程序的(非常短的)代码。对不起,如果代码中有任何糟糕的做法,就像我说我真的不是一个 python 人,这似乎是做我想做的最简单的方法,所以我去了。如果有人能帮我解决问题,我将不胜感激!
PS "./change_wall" 只是一个 bash 脚本,除了改变壁纸之外,它还可以做一些其他的事情。我知道问题不存在,因为自动壁纸更改仍在工作,只是 FUBAR 的托盘图标/控制界面。
#!/usr/bin/python
import os
import wx
import time
import thread
class TaskBarIcon(wx.TaskBarIcon):
def __init__(self):
super(TaskBarIcon, self).__init__()
os.chdir("/home/caleb/walls")
self.SetIcon(wx.Icon('walls.xpm', wx.BITMAP_TYPE_XPM), "Wallpaper switcher")
self.set_nice(None)
self.Bind(wx.EVT_TASKBAR_LEFT_UP, self.set_new_wall_x)
def CreatePopupMenu(self):
menu = wx.Menu()
nice_item = menu.AppendRadioItem(-1, "Nice")
naughty_item = menu.AppendRadioItem(-1, "Naughty")
if self.type == 'nice':
nice_item.Check()
elif self.type == 'naughty':
naughty_item.Check()
menu.Bind(wx.EVT_MENU, self.set_nice, nice_item)
menu.Bind(wx.EVT_MENU, self.set_naughty, naughty_item)
return menu
def set_nice(self, event):
self.type = 'nice'
self.set_new_wall()
def set_naughty(self, event):
self.type = 'naughty'
self.set_new_wall()
def set_new_wall(self):
os.system("./change_wall " + self.type)
self.last_changed_time = time.time()
def set_new_wall_x(self, event):
self.set_new_wall()
def main():
app = wx.App(False)
the_icon = TaskBarIcon()
thread.start_new_thread(app.MainLoop, ())
while 1:
if (time.time() > the_icon.last_changed_time + 600):
the_icon.set_new_wall()
if __name__ == '__main__':
main()
【问题讨论】:
-
刚开始的2个想法,1你python版本改了吗?和 2 您是否测试过使用其他图像作为图标?您的代码正在使用 Mint 17.2