Есть ли способ перезагрузить скрипт python rumps по клику? - PullRequest
0 голосов
/ 10 апреля 2020

Я новичок в python, и я создаю простое приложение для часовых поясов с крупами, чтобы сделать его приложением строки состояния, и py2app для упаковки, где я отображаю несколько разных часовых поясов и хотел бы получить ссылку sh Кнопка для перезагрузки отображаемого времени.

Я читал об использовании

import importlib

для перезагрузки модулей, но я не совсем уверен, как использовать этот метод с библиотекой rumps.

Это мой текущий скрипт:

import rumps
import datetime
import pytz
import os 
import sys
import importlib

class TimeZone(object):
    def __init__(self):
        super(TimeZone, self)
        self.config = {
            "app_name": "TimeZone",
            "ld_current_time" : "London " +  datetime.datetime.now(pytz.timezone('Europe/London')).strftime('%I:%M %p'),
            "ny_current_time" : "New York " + datetime.datetime.now(pytz.timezone('US/Eastern')).strftime('%I:%M %p') ,
            "la_current_time" : "Los Angeles " + datetime.datetime.now(pytz.timezone('US/Pacific')).strftime('%I:%M %p'),
         }
        self.app = rumps.App(self.config["app_name"])
        self.ld = rumps.MenuItem(title=self.config["ld_current_time"],callback='')
        self.ny = rumps.MenuItem(title=self.config["ny_current_time"],callback='')
        self.la = rumps.MenuItem(title=self.config["la_current_time"],callback='')
        self.set_up_menu()


    def set_up_menu(self):
        self.app.title = "⏳"
        self.app.menu = [self.ld,self.ny,self.la]


    @rumps.clicked('Refresh')
    def refresh(self):
        print('refresh')
        rumps.MenuItem.update(self.app.menu,1)
        #self.menu.update = [self.ld,self.ny,None,self.la,None]


    def run(self):
        self.app.run()

if __name__ == '__main__':
    app = TimeZone()
    app.run()

Любой вклад будет принят с благодарностью. Ура!

1 Ответ

0 голосов
/ 17 апреля 2020

Я решил эту проблему с помощью встроенных модулей os и sys python:

        @rumps.clicked('restart')
        def restart(self):
            print('restarted')
            os.execl(sys.executable, sys.executable, * sys.argv)

...