Я разрабатываю графический интерфейс с использованием tkinter, который выступает в качестве средства просмотра изображений. Рабочий процесс заключается в том, что мы выбираем изображение с параметром «новое изображение» в строке меню, которое отображает выбранное изображение на холсте и создает небольшое окно со строками и столбцами, в котором отображаются все изображения, присутствующие в папке выбранного изображения. Проблема, с которой я сталкиваюсь, заключается в том, что когда загружаются все изображения из папки, это занимает около 6 секунд, и только после этого 6 секунд выбранное изображение отображается на холсте. я хочу сначала отобразить выбранное изображение и, как фоновый процесс, загрузить изображения в папку. это код self.drawImage () - отображает изображение (self.image) на холсте, self.folderImg () - загружает все изображение с пути (self.path) и отображает его в окне строк и столбцов
def newImage(self):
self.imageName= filedialog.askopenfilename()
filetype=""
try: filetype=imghdr.what(self.imageName)
except:
messagebox.showinfo(title="Image File",message="Choose an Image File!" , parent=self.master)
self.path=os.path.split(self.imageName)[0]
if filetype in ['jpeg', 'bmp', 'png', 'tiff']:
im= PIL.Image.open(self.imageName)
self.image=im
self.originalImage=im.copy()
self.imageSize=im.size
self.imageForTk=self.makeImageForTk()
self.drawImage()
self.folderImg()
Я прочитал какой-то пост и пришел к выводу, что многопоточность будет работать, поэтому я изменил "self.folderImg ()" на
t1=threading.Thread(target=self.folderImg)
t1.start()
, он не работал, когда я разместил его после "self.image = im ", это дало тот же результат, что и раньше, но когда я поместил его как последнюю строку, я получил вывод, я хотел, чтобы изображение холста отображалось раньше, и через 6 секунд отображались только изображения папок, но в течение этих 6 секундGUI застрял и не отвечает, не могу нажать любую кнопку. Пожалуйста, дайте решение для загрузки изображений папки с меньшим временем или без ущерба для функциональности графического интерфейса
окончательный код
def newImage(self):
self.imageName= filedialog.askopenfilename()
filetype=""
try: filetype=imghdr.what(self.imageName)
except:
messagebox.showinfo(title="Image File",message="Choose an Image File!" , parent=self.master)
self.path=os.path.split(self.imageName)[0]
if filetype in ['jpeg', 'bmp', 'png', 'tiff']:
im= PIL.Image.open(self.imageName)
self.image=im
self.originalImage=im.copy()
self.imageSize=im.size
self.imageForTk=self.makeImageForTk()
self.drawImage()
t1=threading.Thread(target=self.folderImg)
t1.start()