所以我一直在使用rumps开发一个小python应用程序,我想定期在状态栏中更新应用程序的标题。 rumps中似乎有一个函数可以做我正在寻找的东西,但我似乎无法让它工作,这里是一些示例代码的改编,显示我遇到的问题:
import rumps
class AwesomeStatusBarApp(rumps.App):
def __init__(self):
super(AwesomeStatusBarApp, self).__init__("Awesome App")
self.menu = ["updating"]
@rumps.timer(1)
def sayhi(self, _):
super(AwesomeStatusBarApp, self).title(self,"Hi")
if __name__ == "__main__":
AwesomeStatusBarApp().run()
init函数中的超级调用工作得很好,而sayhi函数中的title函数应该完全符合我的要求,更新标题并告诉NSStatusBar更新它,但是我失败了以下内容结果:
2014-06-18 10:03:26.033 Python [29628:1107]:'NoneType'对象不可调用
然后是一个大型追溯(我可以提供,它只是格式不好)。
我认为我遇到的错误可能与正在进行的线程有关,但是我不知道该怎么办。我试图远离臀部,但我不能让NSStatusBar独立工作,它总是抛出自己的错误。我希望做一些非常简单的事情,但似乎我永远无法让它正常工作,这很可惜。
感谢任何帮助或建议,谢谢!
答案 0 :(得分:0)
您的代码至少存在两个问题:
无需调用sayhi
中的super()
在.title()
的{{1}}来电中,您不应该通过" self"参数
我不知道其中任何一个是否与您的问题有关而没有看到回溯。
答案 1 :(得分:0)
问题不在于rumps或PyObjC - 只是一些简单的Python错误。您可能想要了解类在Python中的工作方式。
罗纳德关于这条线的两点是正确的,
super(AwesomeStatusBarApp, self).title(self, "Hi")
无需调用超类实现,
self.title(self, "Hi")
但这仍然是错误的,因为你永远不想在类中的方法之间传递self
- 这是自动发生的,
self.title("Hi")
仍然这是错误的,因为title
是一个如此重写的属性,
self.title = "Hi"
完整代码:
import rumps
class AwesomeStatusBarApp(rumps.App):
def __init__(self):
super(AwesomeStatusBarApp, self).__init__("Awesome App")
self.menu = ["updating"]
@rumps.timer(1)
def sayhi(self, _):
self.title = "Hi"
if __name__ == "__main__":
AwesomeStatusBarApp().run()
答案 2 :(得分:0)
您可以通过设置类的title
属性来更新应用程序标题。
你可以在任何课程方法中self.title = "New Title"
。
您也可以instance.title = "New Title"
。它会立即更新。