RUMPS 升级应用程序 Ti

2024-09-28 12:17:36 发布

您现在位置:Python中文网/ 问答频道 /正文

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

2014-06-18 10:03:26.033 Python[29628:1107] : 'NoneType' object is not callable

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

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

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


Tags: 函数selfapp应用程序标题titleinitdef
3条回答

问题不在于rumps或PyObjC——只是一些简单的Python错误。您可能需要阅读Python中的类是如何工作的。在

罗纳德关于这条线的两点是正确的

super(AwesomeStatusBarApp, self).title(self, "Hi")

不需要调用超类实现

^{pr2}$

但这仍然是错误的,因为您永远不想在类中的方法之间传递self,这是自动发生的

^{3}$

这仍然是错误的,因为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()

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

  1. sayhi中调用super()是不必要的

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

我不知道这些是否与你的问题有关,没有看到回溯。在

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

您可以在类的任何方法中执行self.title = "New Title"。 {cd3>你也可以。它会立即更新自己。在

相关问题 更多 >

    热门问题