def save_figure(self, *args): from six.moves import tkinter_tkfiledialog, tkinter_messagebox filetypes = self.canvas.get_supported_filetypes().copy() default_filetype = self.canvas.get_default_filetype() # Tk doesn't provide a way to choose a default filetype, # so we just have to put it first default_filetype_name = filetypes[default_filetype] del filetypes[default_filetype] sorted_filetypes = list(six.iteritems(filetypes)) sorted_filetypes.sort() sorted_filetypes.insert(0, (default_filetype, default_filetype_name)) tk_filetypes = [(name, '*.%s' % ext) for (ext, name) in sorted_filetypes] # adding a default extension seems to break the # asksaveasfilename dialog when you choose various save types # from the dropdown. Passing in the empty string seems to # work - JDH! #defaultextension = self.canvas.get_default_filetype() defaultextension = '' initialdir = rcParams.get('savefig.directory', '') initialdir = os.path.expanduser(initialdir) initialfile = self.canvas.get_default_filename() fname = tkinter_tkfiledialog.asksaveasfilename( master=self.window, title='Save the figure', filetypes=tk_filetypes, defaultextension=defaultextension, initialdir=initialdir, initialfile=initialfile, ) if fname == "" or fname == (): return else: if initialdir == '': # explicitly missing key or empty str signals to use cwd rcParams['savefig.directory'] = initialdir else: # save dir for next time rcParams['savefig.directory'] = os.path.dirname( six.text_type(fname)) try: # This method will handle the delegation to the correct type self.canvas.print_figure(fname) except Exception as e: tkinter_messagebox.showerror("Error saving file", str(e))
def add_person(self, person_id, person_list_box): """Add a new researcher.""" # TODO: Update the 'edit person' dropdown to match person_id existing_people = person_list_box['values'] if person_id in existing_people: messagebox.showerror( message='The person ID "{}" already exists'.format(person_id)) return if not person_id.isalnum(): messagebox.showerror( message='A person ID can only contain letters and numbers') return person_list_box['values'] = sorted(existing_people + (person_id, )) self.session_researcher_box['values'] = person_list_box['values'] name_var = T.StringVar() name_var.set(person_id) self.metadata['people'][person_id] = {'name': name_var} self.update_people_tab(person_id)
def try_save_project_to_file(self, file_name): try: open(file_name, "wb").close() except IOError as e: if not e.errno == 13: # Do not remove read-only files try: remove(file_name) except: pass showerror(title=_("Cannot save project").get(), message=str(e)) return self.save_project_to_file(file_name) if self._user_settings: self._user_settings.account_project(file_name) self._update_recent_projects()
def trigger(self, *args): from six.moves import tkinter_tkfiledialog, tkinter_messagebox filetypes = self.figure.canvas.get_supported_filetypes().copy() default_filetype = self.figure.canvas.get_default_filetype() # Tk doesn't provide a way to choose a default filetype, # so we just have to put it first default_filetype_name = filetypes.pop(default_filetype) sorted_filetypes = ([(default_filetype, default_filetype_name)] + sorted(six.iteritems(filetypes))) tk_filetypes = [(name, '*.%s' % ext) for ext, name in sorted_filetypes] # adding a default extension seems to break the # asksaveasfilename dialog when you choose various save types # from the dropdown. Passing in the empty string seems to # work - JDH! # defaultextension = self.figure.canvas.get_default_filetype() defaultextension = '' initialdir = os.path.expanduser(rcParams['savefig.directory']) initialfile = self.figure.canvas.get_default_filename() fname = tkinter_tkfiledialog.asksaveasfilename( master=self.figure.canvas.manager.window, title='Save the figure', filetypes=tk_filetypes, defaultextension=defaultextension, initialdir=initialdir, initialfile=initialfile, ) if fname == "" or fname == (): return else: if initialdir == '': # explicitly missing key or empty str signals to use cwd rcParams['savefig.directory'] = initialdir else: # save dir for next time rcParams['savefig.directory'] = os.path.dirname( six.text_type(fname)) try: # This method will handle the delegation to the correct type self.figure.savefig(fname) except Exception as e: tkinter_messagebox.showerror("Error saving file", str(e))
def on_generate(self): try: t = self._project_generation_task except AttributeError: pass else: if not t.finished: showerror(title=_("Generation is cancelled").get(), message=_("At least one generation task is already \ in process.").get()) return if not self.proj.build_path: showerror( title=_("Generation is impossible").get(), message=_("No Qemu build path is set for the project.").get()) return try: qvd = qvd_get(self.proj.build_path, version=self.proj.target_version) except BadBuildPath as e: showerror( title=_("Generation is impossible").get(), message=(_("Selected Qemu build path is bad. Reason: %s") % (e.message)).get()) return if not hasattr(self.pw, "reload_build_path_task"): showerror(title=_("Generation is impossible").get(), message=_("Qemu version cache loading failed.").get()) return if not qvd.qvc_is_ready and not self.var_schedule_generation.get(): showerror(title=_("Generation is cancelled").get(), message=_("Qemu version cache is not ready yet. Try \ later.").get()) return self._project_generation_task = ProjectGeneration( self.proj, qvd.src_path, self.sig_qvc_dirtied, self.pw.reload_build_path_task, self.var_gen_chunk_graphs.get()) self.task_manager.enqueue(self._project_generation_task)
def save_figure(self, *args): from six.moves import tkinter_tkfiledialog, tkinter_messagebox filetypes = self.canvas.get_supported_filetypes().copy() default_filetype = self.canvas.get_default_filetype() # Tk doesn't provide a way to choose a default filetype, # so we just have to put it first default_filetype_name = filetypes.pop(default_filetype) sorted_filetypes = ([(default_filetype, default_filetype_name)] + sorted(six.iteritems(filetypes))) tk_filetypes = [(name, '*.%s' % ext) for ext, name in sorted_filetypes] # adding a default extension seems to break the # asksaveasfilename dialog when you choose various save types # from the dropdown. Passing in the empty string seems to # work - JDH! #defaultextension = self.canvas.get_default_filetype() defaultextension = '' initialdir = os.path.expanduser(rcParams['savefig.directory']) initialfile = self.canvas.get_default_filename() fname = tkinter_tkfiledialog.asksaveasfilename( master=self.window, title='Save the figure', filetypes=tk_filetypes, defaultextension=defaultextension, initialdir=initialdir, initialfile=initialfile, ) if fname in ["", ()]: return # Save dir for next time, unless empty str (i.e., use cwd). if initialdir != "": rcParams['savefig.directory'] = ( os.path.dirname(six.text_type(fname))) try: # This method will handle the delegation to the correct type self.canvas.figure.savefig(fname) except Exception as e: tkinter_messagebox.showerror("Error saving file", str(e))
def reload_build_path(self): if self.tm: # If task manager is available then use background task try: self.tm.remove(self.reload_build_path_task) except AttributeError: pass else: del self.reload_build_path_task self.reload_build_path_task = ReloadBuildPathTask(self) self.tm.enqueue(self.reload_build_path_task) else: """ If no task manager is available then account build path right now. It will cause GUI to freeze but there are no more options. """ try: qvd = qvd_load_with_cache(self.p.build_path) except BadBuildPath as bbpe: showerror(_("Bad build path").get(), str(bbpe)) else: qvd.use() self.pht.all_pci_ids_2_objects()
def method_wrapper(self, *args, **kwargs): try: return method(self, *args, **kwargs) except ConnectionError as e: messagebox.showerror('Catalog Connection Error', ('Connection failed: ' + '{}').format(str(e))) except FileNotFoundError as e: messagebox.showerror('File Not Found', ('Catalog file was not found: ' + '{}').format(str(e))) except CatalogLogicError as e: messagebox.showerror('Catalog Logic Error', ('Catalog logic error occurred: ' + '{}').format(str(e))) except ChecksumError as e: messagebox.showerror('Checksum Error', ('Checksum error occurred: ' + '{}').format( str(e))) except Exception as e: messagebox.showerror('Unknown Error', ('Some unknown exception occurred: ' + '{}').format(str(e))) print_(traceback.format_exc())
def set_path(self, path, clear_history=False): def is_subpath(path): if path == '': return False if path == self.root_path: return True return is_subpath(self.catalog.dirname(path)) if path == self.path: return True, self.path if not is_subpath(path): # enforce path to be a subdirectory of connection root path return False, self.path try: if not self.catalog.isdir(path): messagebox.showerror('Path error', ('Path \'{}\' is not a ' + 'directory').format(path)) return False, self.path except IOError as e: if e.errno == exceptions.errno.ENOENT: messagebox.showerror('Connection error', ('Path \'{}\' does ' + 'not exist on catalog').format(path)) return False, self.path raise self.path = path self.navigation_bar.set_path(self.path, clear_history) self.refresh() return True, self.path
def rebuild_cache(self): try: qvd = qvd_get(self.proj.build_path) except BadBuildPath as e: showerror( title=_("Cache rebuilding is impossible").get(), message=(_("Selected Qemu build path is bad. Reason: %s") % (e.message)).get()) return # if 'reload_build_path_task' is not failed if hasattr(self.pw, 'reload_build_path_task'): # reload_build_path_task always run at program start that is why # it's in process when it's not in finished_tasks and not failed if self.pw.reload_build_path_task not in self.pw.tm.finished_tasks: ans = askyesno(self, title=_("Cache rebuilding"), message=_("Cache building is already \ in process. Do you want to start cache rebuilding?")) if not ans: return qvd.remove_cache() self.pw.reload_build_path()
def add_expt(self, expt_id, clone=None): """Create a new experiment and start editing it.""" existing_expts = self.experiment_selector['values'] or () if expt_id in existing_expts: messagebox.showerror( message='The experiment ID "{}" already exists'.format( expt_id)) return if not expt_id or not expt_id[0].isalpha(): messagebox.showerror( message='An experiment ID must start with a letter') return if clone is None: clone = self.template_expt else: self.record_expt() clone = self.metadata['experiments'][clone] self.metadata['experiments'][expt_id] = wrap_dict(clone) self.experiment_selector['values'] = sorted(existing_expts + (expt_id, )) self.experiment_selector.set(expt_id) self.session_experiment_box['values'] = self.experiment_selector[ 'values'] self.update_expts_tab(expt_id)
def set_connection(self, catalog_factory, path): try: # build catalog catalog = catalog_factory(self) if catalog is None: # user must have cancelled something return False path = catalog.normpath(path) # verify root path is valid if not catalog.isdir(path): messagebox.showerror('Path error', ('Path \'{}\' is not a ' + 'directory').format(path)) catalog.close() return False except IOError as e: if e.errno == exceptions.errno.ENOENT: messagebox.showerror('Connection error', ('Connection root path \'{}\' does ' + 'not exist on catalog').format(path)) else: messagebox.showerror('Connection error', ('Connection Error: {}').format(str(e))) return False except (exceptions.ConnectionError, exceptions.NetworkError) as e: messagebox.showerror('Connection error', ('Connection failed with error: ' + '{}').format(str(e))) return False self.catalog = catalog self.root_path = path self.set_path(path, clear_history=True) return True
def on_generate(self): try: t = self._project_generation_task except AttributeError: pass else: if not t.finished: showerror(title=_("Generation is cancelled").get(), message=_("At least one generation task is already \ in process.").get()) return if not self.proj.build_path: showerror( title=_("Generation is impossible").get(), message=_("No Qemu build path is set for the project.").get()) return try: qvd = qvd_get(self.proj.build_path) except BadBuildPath as e: showerror( title=_("Generation is impossible").get(), message=(_("Selected Qemu build path is bad. Reason: %s") % (e.message)).get()) return if not qvd.qvc_is_ready: showerror(title=_("Generation is cancelled").get(), message=_("Qemu version cache is not ready yet. Try \ later.").get()) return self._project_generation_task = ProjectGeneration( self.proj, qvd.src_path, self.sig_qvc_dirtied) self.task_manager.enqueue(self._project_generation_task)
def error_msg_tkpaint(msg, parent=None): from six.moves import tkinter_messagebox as tkMessageBox tkMessageBox.showerror("matplotlib", msg)
def save_figure(self, *args): filetypes = self.canvas.get_supported_filetypes().copy() default_filetype = self.canvas.get_default_filetype() default_filetype_name = filetypes[default_filetype] del filetypes[default_filetype] sorted_filetypes = list(six.iteritems(filetypes)) sorted_filetypes.sort() sorted_filetypes.insert(0, (default_filetype, default_filetype_name)) initialdir = plt.rcParams.get('savefig.directory', '') initialdir = os.path.expanduser(initialdir) initialfile = 'pixeldrill.pdf' fname = tkinter_tkfiledialog.asksaveasfilename( master=self.window, title='Save the pixel drill', filetypes=[('PNG', '*.png'), ('PDF', '*.pdf')], defaultextension='', initialdir=initialdir, initialfile=initialfile, ) if fname == "" or fname == (): return else: if initialdir == '': plt.rcParams['savefig.directory'] = initialdir else: plt.rcParams['savefig.directory'] = os.path.dirname( six.text_type(fname)) try: fig = plt.figure(figsize=(6, 4.5)) ax3 = fig.add_subplot(211, xmargin=0, ymargin=0) ax3.set_xticks(range(nband)) ax3.set_xticklabels(bands) ax3.set_title('Spectral profiles through time') ax3.set_xlim((-0.2, nband - 0.8)) ax3.set_ylim((0, np.nanmax(data))) ax3.xaxis.grid(color='black', linestyle='dotted') box = ax3.get_position() ax3.set_position([ box.x0, box.y0 + box.height * 0.1, box.width, box.height * 0.8 ]) tindex = range(1, len(times) + 1) ax4 = fig.add_subplot(212, xmargin=0, ymargin=0) ax4.set_title('Band time series') ax4.set_xticks(tindex) ax4.set_xlim(0.9, tindex[-1] + 0.1) ax4.set_ylim((0, np.nanmax(data))) for i, p in enumerate(ts.T): ax3.plot(range(nband), p, c='k') for i in range(ts.shape[0]): tt = ts[i, :] ax4.plot(tindex, tt, lw=1, marker='.', linestyle='-', color=colors[i], label=bands[i]) ax4.legend(loc='upper center', bbox_to_anchor=(0.5, -0.2), labelspacing=0.8, handletextpad=0, handlelength=2, borderaxespad=0, ncol=nband, columnspacing=0.5) fig.savefig(fname, bbox_inches='tight') # plt.close(fig) except Exception as e: tkinter_messagebox.showerror("Error saving file", str(e))
def _do_load(self, fname): try: self.load_project_from_file(fname) except Exception as e: showerror(title=_("Project loading failed").get(), message=str(e))
def fail(self, msg): print(msg) tkMessageBox.showerror(message=msg) sys.exit(1)
def error(self, text, trace): messagebox.showerror('Error', text) raise RuntimeError(trace)
def save_figure(self, initialfile=None, filetypes=None, *args): #----------------------------------------------- from six.moves import tkinter_tkfiledialog, tkinter_messagebox #----------------------------------------------- if filetypes: sorted_filetypes = [] filetypes_supported = self.canvas.get_supported_filetypes() for filetype in filetypes: if filetypes_supported.has_key(filetype): sorted_filetypes.append( (filetype, filetypes_supported[filetype])) else: # as before filetypes = self.canvas.get_supported_filetypes().copy() default_filetype = self.canvas.get_default_filetype() # Tk doesn't provide a way to choose a default filetype, # so we just have to put it first default_filetype_name = filetypes[default_filetype] del filetypes[default_filetype] sorted_filetypes = list(six.iteritems(filetypes)) sorted_filetypes.sort() sorted_filetypes.insert(0, (default_filetype, default_filetype_name)) #----------------------------------------------- tk_filetypes = [(name, '*.%s' % ext) for (ext, name) in sorted_filetypes] # adding a default extension seems to break the # asksaveasfilename dialog when you choose various save types # from the dropdown. Passing in the empty string seems to # work - JDH! #defaultextension = self.canvas.get_default_filetype() defaultextension = '' initialdir = rcParams.get('savefig.directory', '') initialdir = os.path.expanduser(initialdir) #----------------------------------------------- if not initialfile: initialfile = self.canvas.get_default_filename() #----------------------------------------------- fname = tkinter_tkfiledialog.asksaveasfilename( master=self.window, title='Save the figure', filetypes=tk_filetypes, defaultextension=defaultextension, initialdir=initialdir, initialfile=initialfile, ) if fname == "" or fname == (): #----------------------------------------------- return fname #----------------------------------------------- else: if initialdir == '': # explicitly missing key or empty str signals to use cwd rcParams['savefig.directory'] = initialdir else: # save dir for next time rcParams['savefig.directory'] = os.path.dirname( six.text_type(fname)) try: # This method will handle the delegation to the correct type self.canvas.print_figure(fname) except Exception as e: tkinter_messagebox.showerror("Error saving file", str(e)) #----------------------------------------------- return fname
def fail(self, msg): print(msg) if self.args.addon_path is None: tkMessageBox.showerror(message=msg) sys.exit(1)
def sort_to_send(self): """The data is collected and prepared here""" course_names = self.courseName.get().split() courses.append(*course_names) self.Init_data = {} if not self.username.get(): creds = CS.get_netrc_creds() if not creds: tkMessageBox.showerror('Error',"No username passed and no .netrc credentials found, unable to login") return False else: username, password = creds else: username = self.username.get() # prompt the user for his password if not specified if not self.password.get(): password = getpass.getpass() else: password = self.password.get() # should we be trimming paths? # TODO: this is a simple hack, something more elaborate needed mppl = None try: if self.mppl_entry.get() and int(self.mppl_entry.get()) > 0: #if mppl specified, always use that mppl = int(self.mppl_entry.get()) elif platform.system() == "Windows": # if mppl is not specified on windows set manually mppl = 90 else: # linux max path length is typically around 4060 so assume thats ok pass except ValueError: tkMessageBox.showerror('Error','Maximum length of a path component should be a positive integer') return False self.Init_data['max_path_part_len'] = mppl if self.proxy.get(): self.Init_data['proxy']= self.proxy.get() if self.parser.get(): self.Init_data['parser'] = self.parser.get() if self.gzip_courses: self.Init_data['gzip_courses'] = True if self.wkfilter.get(): self.Init_data['wk_filter'] = self.wkfilter.get() if self.ignoreFiles.get(): self.Init_data['ignorefiles']= self.ignoreFiles.get() else: # Ignorefiles is a bit buggy, as it would cause a AttributeError if not passed an empty string if the user hasn't entered anything self.Init_data['ignorefiles']= '' if not self.destination: self.destination = self.directory.get() queue.append([username,password]) queue.append(self.Init_data) queue.append([self.destination, bool(self.reverse.get()), bool(self.gzip_courses.get())]) return True