tkinter-async-execute


Nametkinter-async-execute JSON
Version 1.3.2 PyPI version JSON
download
home_pageNone
SummarySimple library that allows interaction between Tkinter and asyncio event loop running in a seperate thread.
upload_time2024-09-26 22:48:28
maintainerNone
docs_urlNone
authorDavid Hozic
requires_python>=3.8
licenseNone
keywords tkinter asyncio async execute execution progress window thread-safe
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            ======================
Tkinter-Async-Execute
======================

Tkinter-Async-Execute is a small library, that provides a way to run an ``asyncio`` event loop alongside Tkinter in
a separate thread.

It provides a way to execute methods of tkinter widgets from inside async functions and ability to call async functions
from functions (commands / events) running in tkinter's thread. The former can be called from any thread (or async function)
and the latter only from functions (commands / events) in tkinter's thread.

To show progress of an async function, submitted from tkinter, an async execution window widget is available,
which will display any text printed with the ``print()`` function (or any stdout write requests).


Installation
==============
.. code-block:: bash

    pip install tkinter-async-execute

Documentation
=============
All documentation is available on https://tkinter-async-execute.readthedocs.io/.


Example
=============
.. code-block:: python

    from tkinter import ttk
    import tkinter as tk
    import asyncio

    import tk_async_execute as tae


    async def async_function():
        # Call tkinter widget methods.
        print("Disabling button")
        tae.tk_execute(bnt.config, state="disabled")  # Thread safe exection
        await asyncio.sleep(5)
        print("Enabling button")
        tae.tk_execute(bnt.config, state="normal")
        await asyncio.sleep(2)

        # Change tkinter text
        print("Renaming button")
        tae.tk_execute(bnt.config, text="Example 2")
        await asyncio.sleep(2)


    def button_clicked():
        # Call async function
        tae.async_execute(async_function(), wait=True, visible=True, pop_up=True, callback=None, master=root)

        # Close application
        root.quit()


    if __name__ == "__main__":
        root = tk.Tk()
        bnt = ttk.Button(root, text="Click me", command=button_clicked, width=20)
        bnt.pack()

        tae.start()  # Starts the asyncio event loop in a different thread.
        root.mainloop()  # Main Tkinter loop
        tae.stop()  # Stops the event loop and closes it.

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "tkinter-async-execute",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": null,
    "keywords": "Tkinter, asyncio, Async execute, Execution progress window, Thread-safe",
    "author": "David Hozic",
    "author_email": null,
    "download_url": "https://files.pythonhosted.org/packages/8c/9c/0ade9cbc976c9b665e60e762d0662a8185277d047ae6327ee4d5465a422e/tkinter_async_execute-1.3.2.tar.gz",
    "platform": null,
    "description": "======================\nTkinter-Async-Execute\n======================\n\nTkinter-Async-Execute is a small library, that provides a way to run an ``asyncio`` event loop alongside Tkinter in\na separate thread.\n\nIt provides a way to execute methods of tkinter widgets from inside async functions and ability to call async functions\nfrom functions (commands / events) running in tkinter's thread. The former can be called from any thread (or async function)\nand the latter only from functions (commands / events) in tkinter's thread.\n\nTo show progress of an async function, submitted from tkinter, an async execution window widget is available,\nwhich will display any text printed with the ``print()`` function (or any stdout write requests).\n\n\nInstallation\n==============\n.. code-block:: bash\n\n    pip install tkinter-async-execute\n\nDocumentation\n=============\nAll documentation is available on https://tkinter-async-execute.readthedocs.io/.\n\n\nExample\n=============\n.. code-block:: python\n\n    from tkinter import ttk\n    import tkinter as tk\n    import asyncio\n\n    import tk_async_execute as tae\n\n\n    async def async_function():\n        # Call tkinter widget methods.\n        print(\"Disabling button\")\n        tae.tk_execute(bnt.config, state=\"disabled\")  # Thread safe exection\n        await asyncio.sleep(5)\n        print(\"Enabling button\")\n        tae.tk_execute(bnt.config, state=\"normal\")\n        await asyncio.sleep(2)\n\n        # Change tkinter text\n        print(\"Renaming button\")\n        tae.tk_execute(bnt.config, text=\"Example 2\")\n        await asyncio.sleep(2)\n\n\n    def button_clicked():\n        # Call async function\n        tae.async_execute(async_function(), wait=True, visible=True, pop_up=True, callback=None, master=root)\n\n        # Close application\n        root.quit()\n\n\n    if __name__ == \"__main__\":\n        root = tk.Tk()\n        bnt = ttk.Button(root, text=\"Click me\", command=button_clicked, width=20)\n        bnt.pack()\n\n        tae.start()  # Starts the asyncio event loop in a different thread.\n        root.mainloop()  # Main Tkinter loop\n        tae.stop()  # Stops the event loop and closes it.\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "Simple library that allows interaction between Tkinter and asyncio event loop running in a seperate thread.",
    "version": "1.3.2",
    "project_urls": null,
    "split_keywords": [
        "tkinter",
        " asyncio",
        " async execute",
        " execution progress window",
        " thread-safe"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "d30a74040374f46078811cff85c193605f3cf72fc9862080a5c2807b0e344198",
                "md5": "5d37764c784fde658cb5cc7994885122",
                "sha256": "723199a86c2b89ebf2d8a6dc36d4e59657ef2c3506366899c14bdfdb476f623e"
            },
            "downloads": -1,
            "filename": "tkinter_async_execute-1.3.2-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "5d37764c784fde658cb5cc7994885122",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 10546,
            "upload_time": "2024-09-26T22:48:27",
            "upload_time_iso_8601": "2024-09-26T22:48:27.688367Z",
            "url": "https://files.pythonhosted.org/packages/d3/0a/74040374f46078811cff85c193605f3cf72fc9862080a5c2807b0e344198/tkinter_async_execute-1.3.2-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "8c9c0ade9cbc976c9b665e60e762d0662a8185277d047ae6327ee4d5465a422e",
                "md5": "039ca09924f8de8b75699c76630fb773",
                "sha256": "60819696b0a8ed2e66746b6cc61cd0ffc0fd46e430b5edf2f595d040e6efc216"
            },
            "downloads": -1,
            "filename": "tkinter_async_execute-1.3.2.tar.gz",
            "has_sig": false,
            "md5_digest": "039ca09924f8de8b75699c76630fb773",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 8219,
            "upload_time": "2024-09-26T22:48:28",
            "upload_time_iso_8601": "2024-09-26T22:48:28.836151Z",
            "url": "https://files.pythonhosted.org/packages/8c/9c/0ade9cbc976c9b665e60e762d0662a8185277d047ae6327ee4d5465a422e/tkinter_async_execute-1.3.2.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-09-26 22:48:28",
    "github": false,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "lcname": "tkinter-async-execute"
}
        
Elapsed time: 0.83154s