示例#1
0
    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)
示例#3
0
文件: qdc-gui.py 项目: windsmell/qdt
    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()
示例#4
0
    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))
示例#5
0
文件: qdc-gui.py 项目: ufwt/qdt
    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)
示例#6
0
    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))
示例#7
0
    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()
示例#8
0
 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())
示例#9
0
    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
示例#10
0
文件: qdc-gui.py 项目: laerreal/qdt
    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)
示例#12
0
    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
示例#13
0
文件: qdc-gui.py 项目: laerreal/qdt
    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)
示例#14
0
def error_msg_tkpaint(msg, parent=None):
    from six.moves import tkinter_messagebox as tkMessageBox
    tkMessageBox.showerror("matplotlib", msg)
示例#15
0
    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))
示例#16
0
文件: qdc-gui.py 项目: ufwt/qdt
 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)
示例#18
0
 def error(self, text, trace):
     messagebox.showerror('Error', text)
     raise RuntimeError(trace)
示例#19
0
    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
示例#20
0
 def fail(self, msg):
     print(msg)
     if self.args.addon_path is None:
         tkMessageBox.showerror(message=msg)
     sys.exit(1)
示例#21
0
def error_msg_tkpaint(msg, parent=None):
    from six.moves import tkinter_messagebox as tkMessageBox
    tkMessageBox.showerror("matplotlib", msg)
示例#22
0
    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