RUMPS更新应用程序标题

时间:2014-06-18 17:08:25

标签: python pyobjc nsstatusbar

所以我一直在使用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独立工作,它总是抛出自己的错误。我希望做一些非常简单的事情,但似乎我永远无法让它正常工作,这很可惜。

感谢任何帮助或建议,谢谢!

3 个答案:

答案 0 :(得分:0)

您的代码至少存在两个问题:

  1. 无需调用sayhi中的super()

  2. .title()的{​​{1}}来电中,您不应该通过" self"参数

  3. 我不知道其中任何一个是否与您的问题有关而没有看到回溯。

答案 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"。它会立即更新。