Ошибка PIL и tkinter: TypeError: ожидаемый объект str, bytes или os.PathLike, а не список - PullRequest
2 голосов
/ 03 апреля 2020

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

Код:

import tkinter as tk
from tkinter import *
import random
from PIL import Image
window=Tk()
window.geometry('500x550')
window.resizable(False, False)
f=tk.Frame()
f.config(bg='blue', height='500', width='500')
f.pack()
cat=tk.Button(window, text='Cat')
cat.config()
cat.pack(fill=X)
dog=tk.Button(window, text='Dog')
dog.config()
dog.pack(fill=X)
images=['cat1.jpg', 'cat2.jpg', 'cat3.jpg', 'cube1.jpg', 'cube2.jpg', 'cube3.jpg']
imgimport = open(random.sample(images, 1))
img = PIL.Image.open(imgimport)
img.show()

Ответы [ 2 ]

2 голосов
/ 03 апреля 2020

random.sample() возвращает список элементов определенной длины, выбранных из последовательности. Так что даже random.sample(list, length=1) возвращает список, а не элемент. Вы также можете использовать random.sample()[0], как сказал @Axe.

1 голос
/ 04 апреля 2020

random.sample используется для создания списка. Если вы хотите получить только один, почему бы вам просто не использовать random.choice(images), он вернет случайную строку из списка images.

Вы использовали Image.open в конце, так что нет необходимо использовать open.

А ваш код в последнем может быть уменьшен до

images=['cat1.jpg', 'cat2.jpg', 'cat3.jpg', 'cube1.jpg', 'cube2.jpg', 'cube3.jpg']
img = Image.open(random.choice(images))
img.show()
...