def _recent_files_menu(self): preferences = UIPreferences() recent_menu = tk.Menu(self._controller._filemenu,tearoff=False) for file in preferences.get_recent_files(): recent_menu.add_command(label=file,command=lambda f=file: self._open_recent_file(f)) recent_menu.add_separator() recent_menu.add_command(label='Clear',command=self._clear_recent) self._controller._filemenu.entryconfig(2,menu=recent_menu)
def body(self, parent, options): preferences = Preferences() logging_config = preferences.get_logging_config() if logging_config is not None: set_logger_config(logging_config) uipreferences = UIPreferences() populate = uipreferences.get_populate_defaults(True) self._populateDefaults.set(1 if populate else 0) qiskitGroup = ttk.LabelFrame(parent, text='QISKit Configuration', padding=(6, 6, 6, 6), borderwidth=4, relief=tk.GROOVE) qiskitGroup.grid(padx=(7, 7), pady=6, row=0, column=0, sticky='nsew') self._qconfigview = QconfigView(qiskitGroup) defaultsGroup = ttk.LabelFrame(parent, text='Defaults', padding=(6, 6, 6, 6), borderwidth=4, relief=tk.GROOVE) defaultsGroup.grid(padx=(7, 7), pady=6, row=1, column=0, sticky='nsw') defaultsGroup.columnconfigure(1, pad=7) self._checkButton = ttk.Checkbutton(defaultsGroup, text="Populate on file new/open", variable=self._populateDefaults) self._checkButton.grid(row=0, column=1, sticky='nsw') loggingGroup = ttk.LabelFrame(parent, text='Logging Configuration', padding=(6, 6, 6, 6), borderwidth=4, relief=tk.GROOVE) loggingGroup.grid(padx=(7, 7), pady=6, row=2, column=0, sticky='nsw') loggingGroup.columnconfigure(1, pad=7) levels = get_logger_levels_for_names( ['qiskit_acqua_chemistry', 'qiskit_acqua']) loglevel = levels[0] ttk.Label(loggingGroup, text="Level:", borderwidth=0, anchor=tk.E).grid(row=0, column=0, sticky='nsew') self._levelCombo = ttk.Combobox( loggingGroup, exportselection=0, state='readonly', values=list(PreferencesDialog._LOG_LEVELS.values())) index = list(PreferencesDialog._LOG_LEVELS.keys()).index(loglevel) self._levelCombo.current(index) self._levelCombo.grid(row=0, column=1, sticky='nsw') self.entry = self._qconfigview.initial_focus return self.entry # initial focus
def _open_file(self): preferences = UIPreferences() filename = tkfd.askopenfilename(parent=self, title='Open Chemistry File', initialdir=preferences.get_openfile_initialdir()) if filename and self._controller.open_file(filename): preferences.add_recent_file(filename) preferences.set_openfile_initialdir(os.path.dirname(filename)) preferences.save()
def load_file(self,filename): if filename is None: return [] try: self._parser = InputParser(filename) self._parser.parse() uipreferences = UIPreferences() if uipreferences.get_populate_defaults(True): self._parser.validate_merge_defaults() self._parser.commit_changes() return self._parser.get_section_names() except: self._parser = None raise
def _save_file_as(self): if self._controller.is_empty(): self._controller._outputView.write_line("No data to save.") return preferences = UIPreferences() filename = tkfd.asksaveasfilename(parent=self, title='Save Chemistry File', initialdir=preferences.get_savefile_initialdir()) if filename and self._controller.save_file_as(filename): preferences.add_recent_file(filename) preferences.set_savefile_initialdir(os.path.dirname(filename)) preferences.save()
def new(self): try: dict = {} jsonfile = os.path.join(os.path.dirname(__file__), 'input_template.json') with open(jsonfile) as json_file: dict = json.load(json_file) self._parser = InputParser(dict) self._parser.parse() uipreferences = UIPreferences() if uipreferences.get_populate_defaults(True): self._parser.validate_merge_defaults() self._parser.commit_changes() return self._parser.get_section_names() except: self._parser = None raise
def apply(self): try: level_name = self._levelCombo.get() levels = [ key for key, value in PreferencesDialog._LOG_LEVELS.items() if value == level_name ] loglevel = levels[0] logging_config = build_logging_config( ['qiskit_acqua_chemistry', 'qiskit_acqua'], loglevel) preferences = Preferences() self._qconfigview.apply(preferences) preferences.set_logging_config(logging_config) preferences.save() set_logger_config(logging_config) uipreferences = UIPreferences() populate = self._populateDefaults.get() uipreferences.set_populate_defaults(False if populate == 0 else True) uipreferences.save() self._controller.get_available_backends() except Exception as e: self.controller.outputview.write_line(str(e))
def apply(self): level_name = self._levelCombo.get() levels = [ key for key, value in PreferencesDialog._LOG_LEVELS.items() if value == level_name ] loglevel = levels[0] logging_config = build_logging_config( ['qiskit_acqua_chemistry', 'qiskit_acqua'], loglevel) token = self._apiToken.get().strip() url = self._url.get().strip() hub = self._hub.get().strip() group = self._group.get().strip() project = self._project.get().strip() preferences = Preferences() preferences.set_token(token if len(token) > 0 else None) preferences.set_url(url if len(url) > 0 else None) preferences.set_hub(hub if len(hub) > 0 else None) preferences.set_group(group if len(group) > 0 else None) preferences.set_project(project if len(project) > 0 else None) preferences.set_logging_config(logging_config) preferences.save() set_logger_config(logging_config) uipreferences = UIPreferences() populate = self._populateDefaults.get() uipreferences.set_populate_defaults(False if populate == 0 else True) uipreferences.save() self._controller.get_available_backends()
def _export_dictionary_to_file(self): if self._controller.is_empty(): self._controller._outputView.write_line("No data to export.") return preferences = UIPreferences() filename = tkfd.asksaveasfilename(parent=self, title='Export Chemistry Input', initialdir=preferences.get_savefile_initialdir()) if filename and self._controller.export_dictionary_to_file(filename): preferences.set_savefile_initialdir(os.path.dirname(filename)) preferences.save()
def quit(self): if tkmb.askyesno('Verify quit', 'Are you sure you want to quit?'): preferences = UIPreferences() preferences.set_geometry(self.master.winfo_geometry()) preferences.save() self._controller.stop() ttk.Frame.quit(self) return True return False
def toggle(self): if self._model.is_empty(): self._outputView.write_line("Missing Input") return self._start_button.state(['disabled']) self._filemenu.entryconfig(0, state='disabled') self._filemenu.entryconfig(1, state='disabled') self._filemenu.entryconfig(2, state='disabled') self._view.after(100, self._process_thread_queue) try: if self._command is Controller._START: self._outputView.clear() filename = None if self._save_algo_json.get() != 0: preferences = UIPreferences() filename = tkfd.asksaveasfilename( parent=self._view, title='Algorithm Input', initialdir=preferences.get_savefile_initialdir()) if not filename: self._thread_queue.put(None) self._start_button.state(['!disabled']) self._filemenu.entryconfig(0, state='normal') self._filemenu.entryconfig(1, state='normal') self._filemenu.entryconfig(2, state='normal') return preferences.set_savefile_initialdir( os.path.dirname(filename)) preferences.save() self._thread = ACQUAChemistryThread(self._model, self._outputView, self._thread_queue, filename) self._thread.daemon = True self._thread.start() else: self.stop() except Exception as e: self._thread = None self._thread_queue.put(None) self._outputView.write_line("Failure: {}".format(str(e))) self._start_button.state(['!disabled']) self._filemenu.entryconfig(0, state='normal') self._filemenu.entryconfig(1, state='normal') self._filemenu.entryconfig(2, state='normal')
def main(): if sys.platform == 'darwin': from Foundation import NSBundle bundle = NSBundle.mainBundle() if bundle: info = bundle.localizedInfoDictionary() or bundle.infoDictionary() info['CFBundleName'] = 'QISkit ACQUA Chemistry' root = tk.Tk() root.withdraw() root.update_idletasks() preferences = UIPreferences() geometry = preferences.get_geometry() if geometry is None: ws = root.winfo_screenwidth() hs = root.winfo_screenheight() w = int(ws / 1.3) h = int(hs / 1.3) x = int(ws / 2 - w / 2) y = int(hs / 2 - h / 2) geometry = '{}x{}+{}+{}'.format(w, h, x, y) preferences.set_geometry(geometry) preferences.save() root.geometry(geometry) preferences = Preferences() if preferences.get_logging_config() is None: logging_config = build_logging_config( ['qiskit_acqua_chemistry', 'qiskit_acqua'], logging.INFO) preferences.set_logging_config(logging_config) preferences.save() set_logger_config(preferences.get_logging_config()) MainView(root) root.after(0, root.deiconify) root.mainloop()
def _clear_recent(self): preferences = UIPreferences() preferences.clear_recent_files() preferences.save()
def body(self, parent, options): preferences = Preferences() logging_config = preferences.get_logging_config() if logging_config is not None: set_logger_config(logging_config) self._apiToken.set(preferences.get_token('')) self._url.set(preferences.get_url(Preferences.URL)) self._hub.set(preferences.get_hub('')) self._group.set(preferences.get_group('')) self._project.set(preferences.get_project('')) self._config_path.set(preferences.get_qconfig_path('')) uipreferences = UIPreferences() populate = uipreferences.get_populate_defaults(True) self._populateDefaults.set(1 if populate else 0) qiskitGroup = ttk.LabelFrame(parent, text='QISKit Configuration', padding=(6, 6, 6, 6), borderwidth=4, relief=tk.GROOVE) qiskitGroup.grid(padx=(7, 7), pady=6, row=0, column=0, sticky='nsew') qiskitGroup.columnconfigure(0, weight=1) qiskitGroup.columnconfigure(1, pad=7) ttk.Label(qiskitGroup, text="Token:", borderwidth=0, anchor=tk.E).grid(row=0, column=0, sticky='nsew') self._apiTokenEntry = EntryCustom(qiskitGroup, textvariable=self._apiToken, width=120, state=tk.NORMAL) self._apiTokenEntry.grid(row=0, column=1, sticky='nsew') ttk.Label(qiskitGroup, text="URL:", borderwidth=0, anchor=tk.E).grid(row=1, column=0, sticky='nsew') self._urlEntry = EntryCustom(qiskitGroup, textvariable=self._url, width=60, state=tk.NORMAL) self._urlEntry.grid(row=1, column=1, sticky='nsw') ttk.Label(qiskitGroup, text="Hub:", borderwidth=0, anchor=tk.E).grid(row=2, column=0, sticky='nsew') self._hubEntry = EntryCustom(qiskitGroup, textvariable=self._hub, state=tk.NORMAL) self._hubEntry.grid(row=2, column=1, sticky='nsw') ttk.Label(qiskitGroup, text="Group:", borderwidth=0, anchor=tk.E).grid(row=3, column=0, sticky='nsew') self._groupEntry = EntryCustom(qiskitGroup, textvariable=self._group, state=tk.NORMAL) self._groupEntry.grid(row=3, column=1, sticky='nsw') ttk.Label(qiskitGroup, text="Project:", borderwidth=0, anchor=tk.E).grid(row=4, column=0, sticky='nsew') self._projectEntry = EntryCustom(qiskitGroup, textvariable=self._project, state=tk.NORMAL) self._projectEntry.grid(row=4, column=1, sticky='nsw') ttk.Label(qiskitGroup, text="Path:", borderwidth=0, anchor=tk.E).grid(row=5, column=0, sticky='nsew') ttk.Label(qiskitGroup, textvariable=self._config_path, borderwidth=0, anchor=tk.W).grid(row=5, column=1, sticky='nsw') defaultsGroup = ttk.LabelFrame(parent, text='Defaults', padding=(6, 6, 6, 6), borderwidth=4, relief=tk.GROOVE) defaultsGroup.grid(padx=(7, 7), pady=6, row=1, column=0, sticky='nsw') defaultsGroup.columnconfigure(1, pad=7) self._checkButton = ttk.Checkbutton(defaultsGroup, text="Populate on file new/open", variable=self._populateDefaults) self._checkButton.grid(row=0, column=1, sticky='nsw') loggingGroup = ttk.LabelFrame(parent, text='Logging Configuration', padding=(6, 6, 6, 6), borderwidth=4, relief=tk.GROOVE) loggingGroup.grid(padx=(7, 7), pady=6, row=2, column=0, sticky='nsw') loggingGroup.columnconfigure(1, pad=7) levels = get_logger_levels_for_names( ['qiskit_acqua_chemistry', 'qiskit_acqua']) loglevel = levels[0] ttk.Label(loggingGroup, text="Level:", borderwidth=0, anchor=tk.E).grid(row=0, column=0, sticky='nsew') self._levelCombo = ttk.Combobox( loggingGroup, exportselection=0, state='readonly', values=list(PreferencesDialog._LOG_LEVELS.values())) index = list(PreferencesDialog._LOG_LEVELS.keys()).index(loglevel) self._levelCombo.current(index) self._levelCombo.grid(row=0, column=1, sticky='nsw') self._label_text = tk.StringVar() self._label = ttk.Label(parent, foreground='red', textvariable=self._label_text, borderwidth=0) self._label.grid(padx=(7, 7), pady=6, row=2, column=0) self._label.grid_remove() self.entry = self._apiTokenEntry return self.entry # initial focus