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"
, Это обновляет себя немедленно.
Есть как минимум две проблемы с вашим кодом:
Призыв к супер () в
sayhi
не обязательноВ призыве к
.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()