Как избежать замерзания tkinter GUI? - PullRequest
1 голос
/ 06 февраля 2020
import tkinter as tk
from tkinter import filedialog
from PIL import ImageTk, Image
import os
import argparse
import numpy as np

db_path = "/fulldatabase/"
output = None
output_path = None


def test():
    root = tk.Tk()
    root.withdraw()
    dirname = tk.filedialog.askdirectory(parent=root, initialdir="./", title='select input query folder')
    root.destroy()
    return (dirname)


if __name__ == "__main__":
    in_dir = test()
    path = os.listdir(in_dir)
    parser = argparse.ArgumentParser()
    parser.add_argument('--output', '-o')
    args = parser.parse_args()
    output_path = args.output
    window = tk.Tk()
    window.title("My App")
    window.geometry("1024x800")
    app = Application(window, in_dir, path)
    window.mainloop()
    output.close()

У меня есть папка запроса ввода с набором различных цветочных изображений, например rose_3, lily_5 и jasmine_2, где ди git после подчеркивания представляет номер его экземпляра.

Я хочу выбрать изображение из входной папки и отобразите его в окне tkinter.

Я также хочу отобразить все другие изображения роз (которые считываются из полной базы данных, то есть из другой папки), скажем rose_1, rose_2, rose_4 и rose_5 (если у меня есть 5 изображений для роз в базе данных) в одном и том же окне tkinter с правой стороны, одно под другим одновременно.

Все это прекрасно работает с этим кодом, но GUI часто зависает. Кто-нибудь может мне помочь с этим?

Ответы [ 2 ]

1 голос
/ 06 февраля 2020

Может быть, вы должны использовать сделать это с потоком. Создайте поток для загрузки своего изображения и проверьте, закончилось ли изображение загрузкой. И вернуть значение, закончено ли оно.

0 голосов
/ 06 февраля 2020

Вы должны выполнить загрузку (и, возможно, дальнейшую обработку) изображения в отдельном потоке.

Создать поток, в который вы загружаете свое изображение, и после выполнения этой задачи вы можете отправить изображение для рендеринга в GUI.

Большинство, если не все фреймворки GUI используют основной поток (с постоянно работающим al oop) для специальной обработки GUI связанных задач, таких как обработка ввода пользователя (мышь). , клавиатура et c.), рендеринг и тд. Как только вы вводите другую загрузку в этот поток (например, загрузку изображения), поток больше не может концентрироваться только на задачах GUI -specifi c. Это приводит к зависанию в вашем GUI.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...