Как использовать Asyncio и Tkinter вместе, не замораживая графический интерфейс? - PullRequest
0 голосов
/ 24 апреля 2019

Я пытаюсь создать приложение с графическим интерфейсом для напоминаний, в котором пользователь дает описание, дату и время, которые хранятся в базе данных sqlite3. Чтобы напомнить, я написал скрипт, который мы выбираем из базы данных и проверяем с текущей датой и временем (Function-async def main ()). Я хочу сделать функцию асинхронной с графическим интерфейсом и связать ее кнопкой Exit (ttk.Button (newwin, text = 'EXIT', command = Remder_exit)), которая также будет выходить из виджета (Add Task). Но он замораживает графический интерфейс, и я не знаю почему.

Я пытался сделать его асинхронным с модулем Multiprocessing, но по какой-то причине он не работал.

to_do.py

Полный код

Вам нужно поискать эти функции

async def main():
        conn = sqlite3.connect("projects.db")
        c = conn.cursor()
        c.execute("SELECT * FROM memo")
        data=c.fetchall()
        while True:
            for task in data:
                if task[3]!= None:
                    # print(type(Dt[3]))
                    # print(Dt[3])
                    current_date=str(datetime.datetime.now().replace(microsecond=0))
                    # print(type(current_date))
                    #print(current_date)
                    if(task[3]==current_date):
                        #Put the Pop-Up Here
                        print("Yes")
                        await asyncio.sleep(5)
async def m_main():
    ev1 = loop.create_task(main())

def reminder_exit():
    global newwin
    #loop = asyncio.get_event_loop()
    #try:
        #loop.run_until_complete(main())
    m_main()
    #newwin.quit()
    #finally:
        #loop.close()

Я ожидаю, что обе функции будут работать асинхронно, но вместо этого графический интерфейс зависает.

...