class SystemTrayIcon(QSystemTrayIcon): showSettingView = pyqtSignal() def __init__(self, icon, parent=None): QSystemTrayIcon.__init__(self, icon, parent) self.activated.connect(self.on_activated) @pyqtSlot(str, bool) def click_menu(self, menu_id, state): if menu_id == "quit": qApp.quit() elif menu_id == "wizard": pass elif menu_id == "about": pass elif menu_id == "settings": self.showSettingView.emit() else: if menu_id == "pause": if not state: delete_selection() self.set_menu_active(state) setting_config.update_trayicon_config(menu_id, state) def set_menu_active(self, state): self.menu.setItemActivity("toggle_speech", not state) self.menu.setItemActivity("key_trigger_ocr", not state) self.menu.setItemActivity("key_trigger_select", not state) def on_activated(self, reason): if reason in [QSystemTrayIcon.Context, QSystemTrayIcon.Trigger]: geometry = self.geometry() mouse_x = int(geometry.x() / 2 + geometry.width() / 2) mouse_y = int(geometry.y() / 2) self.menu = Menu([ CheckboxMenuItem("pause", "暂停翻译", setting_config.get_trayicon_config("pause")), CheckboxMenuItem("toggle_speech", "取词后发音", setting_config.get_trayicon_config("toggle_speech")), CheckboxMenuItem("key_trigger_ocr", "按Ctrl键屏幕取词", setting_config.get_trayicon_config("key_trigger_ocr")), CheckboxMenuItem("key_trigger_select", "按Shift键翻译选区", setting_config.get_trayicon_config("key_trigger_select")), MenuSeparator(), ("settings", "设置"), ("wizard", "向导"), ("about", "关于"), MenuSeparator(), ("quit", "退出"), ]) self.menu.itemClicked.connect(self.click_menu) self.menu.showDockMenu(mouse_x, mouse_y) self.set_menu_active(setting_config.get_trayicon_config("pause")) def get_trayarea(self): geometry = self.geometry() return (geometry.y() / 2, geometry.y() / 2 + geometry.height())
class SystemTrayIcon(QSystemTrayIcon): showSettingView = pyqtSignal() def __init__(self, parent=None): QSystemTrayIcon.__init__(self, self.get_trayicon(), parent) self.activated.connect(self.on_activated) self.menu_is_visible = False def set_trayicon(self): self.setIcon(self.get_trayicon()) def get_trayicon(self): if is_true(setting_config.get_trayicon_config("pause")): icon_name = "pause_trayicon.png" else: icon_name = "trayicon.png" return QIcon(os.path.join(get_parent_dir(__file__), "image", icon_name)) @pyqtSlot(str, bool) def click_menu(self, menu_id, state): if menu_id == "quit": qApp.quit() elif menu_id == "wizard": pass elif menu_id == "about": pass elif menu_id == "settings": self.showSettingView.emit() elif menu_id == "lang": src_lang = setting_config.get_translate_config("src_lang") dst_lang = setting_config.get_translate_config("dst_lang") setting_config.update_translate_config("src_lang", dst_lang) setting_config.update_translate_config("dst_lang", src_lang) self.menu.setItemText("lang", self.get_lang_value()) setting_view.updateLang.emit() else: if menu_id == "pause": if not state: delete_selection() self.set_menu_active(state) setting_config.update_trayicon_config(menu_id, state) self.set_trayicon() def set_menu_active(self, state): self.menu.setItemActivity("toggle_speech", not state) self.menu.setItemActivity("key_trigger_select", not state) self.menu.setItemActivity("local_translate", not state) def get_lang_value(self): return (dict(LANGUAGES))[setting_config.get_translate_config("src_lang")] + " <=> " + (dict(LANGUAGES))[setting_config.get_translate_config("dst_lang")] def on_activated(self, reason): if not self.menu_is_visible: if reason in [QSystemTrayIcon.Context, QSystemTrayIcon.Trigger]: geometry = self.geometry() if QT_VERSION == "5.1": mouse_x = int(geometry.x() / 2 + geometry.width() / 2) mouse_y = int(geometry.y() / 2) else: mouse_x = int(geometry.x() + geometry.width() / 2) mouse_y = int(geometry.y()) self.menu = Menu([ CheckableMenuItem("pause", _("Pause translation"), setting_config.get_trayicon_config("pause")), CheckableMenuItem("toggle_speech", _("Pronounce automatically"), setting_config.get_trayicon_config("toggle_speech")), CheckableMenuItem("key_trigger_select", _("Translate only when holding Ctrl key"), setting_config.get_trayicon_config("key_trigger_select")), CheckableMenuItem("local_translate", _("Offline translation"), setting_config.get_trayicon_config("local_translate")), MenuSeparator(), CheckableMenuItem("lang", self.get_lang_value(), showCheckmark=False), MenuSeparator(), ("settings", _("Settings")), # ("wizard", _("Wizard")), MenuSeparator(), ("quit", _("Exit")), ]) self.menu.itemClicked.connect(self.click_menu) self.menu.menuDismissed.connect(self.exit_menu) self.set_menu_active(setting_config.get_trayicon_config("pause")) if mouse_y > screen_height / 2: self.menu.showDockMenu(mouse_x, mouse_y, cornerDirection="down") else: self.menu.showDockMenu(mouse_x, mouse_y + geometry.height(), cornerDirection="up") self.menu_is_visible = not self.menu_is_visible @pyqtSlot() def exit_menu(self): self.menu_is_visible = False def get_trayarea(self): geometry = self.geometry() return (geometry.y() / 2, geometry.y() / 2 + geometry.height())
class SystemTrayIcon(QSystemTrayIcon): showSettingView = pyqtSignal() def __init__(self, icon, parent=None): QSystemTrayIcon.__init__(self, icon, parent) self.activated.connect(self.on_activated) @pyqtSlot(str, bool) def click_menu(self, menu_id, state): if menu_id == "quit": qApp.quit() elif menu_id == "wizard": pass elif menu_id == "about": pass elif menu_id == "settings": self.showSettingView.emit() else: if menu_id == "pause": if not state: delete_selection() self.set_menu_active(state) setting_config.update_trayicon_config(menu_id, state) def set_menu_active(self, state): self.menu.setItemActivity("toggle_speech", not state) self.menu.setItemActivity("key_trigger_ocr", not state) self.menu.setItemActivity("key_trigger_select", not state) def on_activated(self, reason): if reason in [QSystemTrayIcon.Context, QSystemTrayIcon.Trigger]: geometry = self.geometry() mouse_x = int(geometry.x() / 2 + geometry.width() / 2) mouse_y = int(geometry.y() / 2) self.menu = Menu([ CheckboxMenuItem("pause", "暂停翻译", setting_config.get_trayicon_config("pause")), CheckboxMenuItem( "toggle_speech", "取词后发音", setting_config.get_trayicon_config("toggle_speech")), CheckboxMenuItem( "key_trigger_ocr", "按Ctrl键屏幕取词", setting_config.get_trayicon_config("key_trigger_ocr")), CheckboxMenuItem( "key_trigger_select", "按Shift键翻译选区", setting_config.get_trayicon_config("key_trigger_select")), MenuSeparator(), ("settings", "设置"), ("wizard", "向导"), ("about", "关于"), MenuSeparator(), ("quit", "退出"), ]) self.menu.itemClicked.connect(self.click_menu) self.menu.showDockMenu(mouse_x, mouse_y) self.set_menu_active(setting_config.get_trayicon_config("pause")) def get_trayarea(self): geometry = self.geometry() return (geometry.y() / 2, geometry.y() / 2 + geometry.height())
class SystemTrayIcon(QSystemTrayIcon): showSettingView = pyqtSignal() def __init__(self, parent=None): QSystemTrayIcon.__init__(self, self.get_trayicon(), parent) self.activated.connect(self.on_activated) self.menu_is_visible = False def set_trayicon(self): self.setIcon(self.get_trayicon()) def get_trayicon(self): if is_true(setting_config.get_trayicon_config("pause")): icon_name = "pause_trayicon.png" else: icon_name = "trayicon.png" return QIcon(os.path.join(get_parent_dir(__file__), "image", icon_name)) @pyqtSlot(str, bool) def click_menu(self, menu_id, state): if menu_id == "quit": qApp.quit() elif menu_id == "wizard": pass elif menu_id == "about": pass elif menu_id == "settings": self.showSettingView.emit() elif menu_id == "lang": src_lang = setting_config.get_translate_config("src_lang") dst_lang = setting_config.get_translate_config("dst_lang") setting_config.update_translate_config("src_lang", dst_lang) setting_config.update_translate_config("dst_lang", src_lang) self.menu.setItemText("lang", self.get_lang_value()) setting_view.updateLang.emit() else: if menu_id == "pause": if not state: delete_selection() self.set_menu_active(state) setting_config.update_trayicon_config(menu_id, state) self.set_trayicon() def set_menu_active(self, state): self.menu.setItemActivity("toggle_speech", not state) self.menu.setItemActivity("key_trigger_select", not state) self.menu.setItemActivity("local_translate", not state) def get_lang_value(self): return (dict(LANGUAGES))[setting_config.get_translate_config( "src_lang")] + " <=> " + (dict(LANGUAGES))[ setting_config.get_translate_config("dst_lang")] def on_activated(self, reason): if not self.menu_is_visible: if reason in [QSystemTrayIcon.Context, QSystemTrayIcon.Trigger]: geometry = self.geometry() if QT_VERSION == "5.1": mouse_x = int(geometry.x() / 2 + geometry.width() / 2) mouse_y = int(geometry.y() / 2) else: mouse_x = int(geometry.x() + geometry.width() / 2) mouse_y = int(geometry.y()) self.menu = Menu([ CheckableMenuItem( "pause", _("Pause translation"), setting_config.get_trayicon_config("pause")), CheckableMenuItem( "toggle_speech", _("Pronounce automatically"), setting_config.get_trayicon_config("toggle_speech")), CheckableMenuItem( "key_trigger_select", _("Translate only when holding Ctrl key"), setting_config.get_trayicon_config( "key_trigger_select")), CheckableMenuItem( "local_translate", _("Offline translation"), setting_config.get_trayicon_config("local_translate")), MenuSeparator(), CheckableMenuItem("lang", self.get_lang_value(), showCheckmark=False), MenuSeparator(), ("settings", _("Settings")), # ("wizard", _("Wizard")), MenuSeparator(), ("quit", _("Exit")), ]) self.menu.itemClicked.connect(self.click_menu) self.menu.menuDismissed.connect(self.exit_menu) self.set_menu_active( setting_config.get_trayicon_config("pause")) if mouse_y > screen_height / 2: self.menu.showDockMenu(mouse_x, mouse_y, cornerDirection="down") else: self.menu.showDockMenu(mouse_x, mouse_y + geometry.height(), cornerDirection="up") self.menu_is_visible = not self.menu_is_visible @pyqtSlot() def exit_menu(self): self.menu_is_visible = False def get_trayarea(self): geometry = self.geometry() return (geometry.y() / 2, geometry.y() / 2 + geometry.height())
class SystemTrayIcon(QSystemTrayIcon): showSettingView = pyqtSignal() def __init__(self, parent=None): QSystemTrayIcon.__init__(self, self.get_trayicon(), parent) self.activated.connect(self.on_activated) def set_trayicon(self): self.setIcon(self.get_trayicon()) def get_trayicon(self): if is_true(setting_config.get_trayicon_config("pause")): icon_name = "pause_trayicon.png" else: icon_name = "trayicon.png" return QIcon(os.path.join(get_parent_dir(__file__), "image", icon_name)) @pyqtSlot(str, bool) def click_menu(self, menu_id, state): if menu_id == "quit": qApp.quit() elif menu_id == "wizard": pass elif menu_id == "about": pass elif menu_id == "settings": self.showSettingView.emit() elif menu_id == "lang": src_lang = setting_config.get_translate_config("src_lang") dst_lang = setting_config.get_translate_config("dst_lang") setting_config.update_translate_config("src_lang", dst_lang) setting_config.update_translate_config("dst_lang", src_lang) self.menu.setItemText("lang", self.get_lang_value()) setting_view.updateLang.emit() else: if menu_id == "pause": if not state: delete_selection() self.set_menu_active(state) setting_config.update_trayicon_config(menu_id, state) self.set_trayicon() def set_menu_active(self, state): self.menu.setItemActivity("toggle_speech", not state) self.menu.setItemActivity("key_trigger_select", not state) def get_lang_value(self): return (dict(LANGUAGES))[setting_config.get_translate_config("src_lang")] + " -> " + (dict(LANGUAGES))[setting_config.get_translate_config("dst_lang")] def on_activated(self, reason): if reason in [QSystemTrayIcon.Context, QSystemTrayIcon.Trigger]: geometry = self.geometry() mouse_x = int(geometry.x() / 2 + geometry.width() / 2) mouse_y = int(geometry.y() / 2) self.menu = Menu([ CheckboxMenuItem("pause", _("Pause translate"), setting_config.get_trayicon_config("pause")), CheckboxMenuItem("toggle_speech", _("Voice after translate"), setting_config.get_trayicon_config("toggle_speech")), CheckboxMenuItem("key_trigger_select", _("Press ctrl to translate selection"), setting_config.get_trayicon_config("key_trigger_select")), MenuSeparator(), CheckboxMenuItem("lang", self.get_lang_value(), showCheckmark=False), MenuSeparator(), ("settings", _("Settings")), ("wizard", _("Wizard")), ("about", _("About")), MenuSeparator(), ("quit", _("Exit")), ]) self.menu.itemClicked.connect(self.click_menu) self.menu.showDockMenu(mouse_x, mouse_y) self.set_menu_active(setting_config.get_trayicon_config("pause")) def get_trayarea(self): geometry = self.geometry() return (geometry.y() / 2, geometry.y() / 2 + geometry.height())