1

所以我一直在研究一个使用臀部的小python应用程序,我想定期更新状态栏中应用程序的标题。臀部似乎有一个功能应该做我正在寻找的功能,但我似乎无法让它工作,这是一些示例代码的改编,显示了我遇到的问题:

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 函数中的 super 调用工作得很好,sayhi 函数中的 title 函数应该完全符合我的要求,更新标题并告诉 NSStatusBar 更新它,但是我失败了以下结果:

2014-06-18 10:03:26.033 Python [29628:1107]:“NoneType”对象不可调用

然后是一个大的回溯(我可以提供,只是格式不太好)。

我认为我遇到的错误可能与正在进行的线程有关,但是我不知道该怎么做。我试着远离臀部,但我不能让 NSStatusBar 自己工作,它总是抛出自己的错误。我想做一些非常简单的事情,但似乎我永远无法让它正常工作,这很遗憾。

任何帮助或建议表示赞赏,谢谢!

4

3 回答 3

0

您的代码至少有两个问题:

  1. sayhi不需要调用 super() in

  2. 在对 in 的调用中.title()sayhi您不应传递“self”参数

在没有看到回溯的情况下,我不知道其中任何一个是否与您的问题有关。

于 2014-07-23T08:54:52.900 回答
0

问题不在于臀部或 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()
于 2014-08-10T00:15:48.813 回答
0

您可以通过设置类的属性来更新应用程序标题title

你可以self.title = "New Title"在任何类的方法中做。你也可以这样做instance.title = "New Title"。它会立即自我更新。

于 2015-10-26T08:40:23.303 回答