예제 #1
0
def launch():
    _prepare_thonny_user_dir()
    _misc_prepare()

    try:
        from thonny import workbench

        if _should_delegate():
            # First check if there is existing Thonny instance to handle the request
            delegation_result = _try_delegate_to_existing_instance(
                sys.argv[1:])
            if delegation_result == True:  # pylint: disable=singleton-comparison
                # we're done
                print("Delegated to an existing Thonny instance. Exiting now.")
                return 0

            if hasattr(delegation_result, "accept"):
                # we have server socket to put in use
                server_socket = delegation_result
            else:
                server_socket = None

            bench = workbench.Workbench(server_socket)
        else:
            bench = workbench.Workbench()

        try:
            bench.mainloop()
        except SystemExit:
            bench.destroy()
        return 0
    except SystemExit as e:
        from tkinter import messagebox

        messagebox.showerror("System exit", str(e), parent=get_workbench())
        return -1
    except Exception:
        from logging import exception

        exception("Internal launch or mainloop error")
        from thonny import ui_utils
        import traceback

        dlg = ui_utils.LongTextDialog("Internal error",
                                      traceback.format_exc(),
                                      parent=get_workbench())
        ui_utils.show_dialog(dlg, get_workbench())
        return -1
    finally:
        runner = get_runner()
        if runner is not None:
            runner.destroy_backend()

    return 0
예제 #2
0
def launch():
    _prepare_thonny_user_dir()
    _misc_prepare()

    try:
        _update_sys_path()

        from thonny import workbench

        if _should_delegate():
            # First check if there is existing Thonny instance to handle the request
            delegation_result = _try_delegate_to_existing_instance(
                sys.argv[1:])
            if delegation_result == True:
                # we're done
                print("Delegated to an existing Thonny instance. Exiting now.")
                return

            if hasattr(delegation_result, "accept"):
                # we have server socket to put in use
                server_socket = delegation_result
            else:
                server_socket = None

            bench = workbench.Workbench(server_socket)
        else:
            bench = workbench.Workbench()

        try:
            bench.mainloop()
        except SystemExit:
            bench.destroy()
        return 0
    except SystemExit as e:
        from tkinter import messagebox
        messagebox.showerror("System exit", str(e))
    except:
        from logging import exception
        exception("Internal error")
        import tkinter.messagebox
        import traceback
        tkinter.messagebox.showerror("Internal error", traceback.format_exc())
        return -1
    finally:
        from thonny.globals import get_runner
        runner = get_runner()
        if runner != None:
            runner.kill_backend()
예제 #3
0
def launch():
    import runpy

    if sys.executable.endswith("thonny.exe"):
        # otherwise some library may try to run its subprocess with thonny.exe
        # NB! Must be pythonw.exe not python.exe, otherwise Runner thinks console
        # is already allocated.
        sys.executable = sys.executable[:-len("thonny.exe")] + "pythonw.exe"

    set_dpi_aware()

    try:
        runpy.run_module("thonny.customize", run_name="__main__")
    except ImportError:
        pass

    _prepare_thonny_user_dir()

    if not _check_welcome():
        return 0

    if _should_delegate():
        try:
            _delegate_to_existing_instance(sys.argv[1:])
            print("Delegated to an existing Thonny instance. Exiting now.")
            return 0
        except Exception:
            traceback.print_exc()

    # Did not or could not delegate

    try:
        from thonny import workbench

        bench = workbench.Workbench()
        try:
            bench.mainloop()
        except SystemExit:
            bench.destroy()
        return 0

    except SystemExit as e:
        from tkinter import messagebox

        messagebox.showerror("System exit", str(e))
        return -1

    except Exception:
        from logging import exception

        exception("Internal launch or mainloop error")
        from thonny import ui_utils

        dlg = ui_utils.LongTextDialog("Internal error", traceback.format_exc())
        ui_utils.show_dialog(dlg, get_workbench())
        return -1
    finally:
        runner = get_runner()
        if runner is not None:
            runner.destroy_backend()

    return 0
예제 #4
0
def launch():
    import gettext
    import runpy

    if sys.executable.endswith("thonny.exe"):
        # otherwise some library may try to run its subprocess with thonny.exe
        # NB! Must be pythonw.exe not python.exe, otherwise Runner thinks console
        # is already allocated.
        sys.executable = sys.executable[:-len("thonny.exe")] + "pythonw.exe"

    set_dpi_aware()
    gettext.install("thonny", "locale")

    try:
        runpy.run_module("thonny.customize", run_name="__main__")
    except ImportError:
        pass

    if not _check_welcome():
        return

    try:
        from thonny import workbench

        if _should_delegate():
            # First check if there is existing Thonny instance to handle the request
            delegation_result = _try_delegate_to_existing_instance(
                sys.argv[1:])
            if delegation_result == True:  # pylint: disable=singleton-comparison
                # we're done
                print("Delegated to an existing Thonny instance. Exiting now.")
                return 0

            if hasattr(delegation_result, "accept"):
                # we have server socket to put in use
                server_socket = delegation_result
            else:
                server_socket = None

            bench = workbench.Workbench(server_socket)
        else:
            bench = workbench.Workbench()

        try:
            bench.mainloop()
        except SystemExit:
            bench.destroy()
        return 0
    except SystemExit as e:
        from tkinter import messagebox

        messagebox.showerror("System exit", str(e), parent=get_workbench())
        return -1
    except Exception:
        from logging import exception

        exception("Internal launch or mainloop error")
        from thonny import ui_utils
        import traceback

        dlg = ui_utils.LongTextDialog("Internal error",
                                      traceback.format_exc(),
                                      parent=get_workbench())
        ui_utils.show_dialog(dlg, get_workbench())
        return -1
    finally:
        runner = get_runner()
        if runner is not None:
            runner.destroy_backend()

    return 0