Задать вопрос
Ответы пользователя по тегу Python
  • Не передаются данные eel, что делать?

    The_Sketch
    @The_Sketch
    Веб разработчик x)
    Проблема возникает из-за того, что вызов askdirectory() блокирует выполнение программы до тех пор, пока пользователь не выберет папку. Однако в вашем коде используется асинхронный JavaScript, поэтому нужно использовать асинхронную версию askdirectory().

    Для этого можно использовать библиотеку aioify для превращения синхронных функций в асинхронные. Также нужно обновить метод downdir() для использования асинхронной версии askdirectory().
    from tkinter.filedialog import askdirectory
    from getpass import getuser
    
    import eel
    from aioify import aioify
    
    
    eel.init("web")
    
    downloadsPath = f"C:/Users/{getuser()}/Downloads"
    
    # Превращаем функцию askdirectory() в асинхронную
    async_askdirectory = aioify(askdirectory)
    
    
    @eel.expose
    async def downdir():
        # Используем асинхронную версию askdirectory()
        path = await async_askdirectory()
        return path
    
    
    @eel.expose
    def defaultPath():
        return downloadsPath
    
    
    eel.start("index.html", size=(500, 800), mode="chrome")

    async function defaultPath(){
        let path = await eel.defaultPath()();
    
        document.getElementById('tpd').textContent = path;
    }
    
    defaultPath();
    
    
    async function downloadsDir(){
        let dpath = await eel.downdir()();
        return await dpath;
    }
    
    
    document.querySelector('#dl').onclick = async () => {
        let path = await downloadsDir();
        document.getElementById('tpd').textContent = path;
        console.log("+")
    }

    Теперь вызов askdirectory() не блокирует выполнение программы, и вы можете выбрать папку в диалоговом окне.
    Ответ написан