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 работает просто отлично, а функция title в функции sayhi должна делать именно то, что я ищу, обновлять заголовок и сообщать NSStatusBar, чтобы он обновлялся, однако мне не удается получить следующий результат:

2014-06-18 10: 03: 26.033 Python [29628: 1107]: объект 'NoneType' не вызывается

А потом большой трекбек (который я могу предоставить, он просто плохо отформатировал).

Я думаю, что ошибка, с которой я сталкиваюсь, может иметь какое-то отношение к продолжению потоков, однако я не знаю, что делать. Я пытался отойти от огузков, но я не могу заставить NSStatusBar работать самостоятельно, он всегда выдает свою ошибку. Я пытаюсь сделать что-то действительно простое, но мне кажется, что я никогда не смогу заставить его работать правильно, что очень жаль.

Любая помощь или совет приветствуется, спасибо!

3 ответа

Вы можете обновить название приложения, установив title свойство класса.

Ты можешь сделать self.title = "New Title" в любом методе класса. Вы также можете сделать instance.title = "New Title", Это обновляет себя немедленно.

Есть как минимум две проблемы с вашим кодом:

  1. Призыв к супер () в sayhi не обязательно

  2. В призыве к .title() в sayhi Вы не должны передавать аргумент "себя"

Я понятия не имею, связано ли какое-либо из них с вашей проблемой, не видя следа.

Проблема не с крупами или 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()
Другие вопросы по тегам