Ошибка импорта изображений PIL и как отображать изображения в приложении Tkinter - PullRequest
0 голосов
/ 26 мая 2020

У меня проблема с Python Image и ImageTk из модуля PIL , поскольку я продолжаю получать ошибку No module named PIL в моей конфигурации запуска PyCharm (Python 2.7). Я знаю, что эта проблема упоминалась еще в нескольких вопросах, но мне не удалось ее решить. Так что я надеюсь найти здесь решение.

Я создал виртуальную среду conda в PyCharm и успешно установил там подушку и подушку. См. Снимок экрана моего окна интерпретатора проекта здесь .

Кроме того, когда я набираю в консоли import PIL или import Image, ошибки не возникает. Однако когда я запускаю сценарий, который импортирует PIL, возникает ошибка no module с именем PIL (то же самое для import Image). Вот скриншот конфигурации запуска PyCharm моего скрипта .

Еще меня сводит с ума то, что когда я запускаю скрипт Python вне PyCharm, используя обычный Windows 10 консоли, ошибка импорта не возникает, но изображение, которое я хотел бы отобразить в пользовательском интерфейсе, отображается неправильно. Вот снимок экрана, показывающий результат приложения Tkinter слева, а изображение, которое должно отображаться, показано справа . Поэтому я ожидаю, что изображение справа появится в окне Tkinter, где в настоящее время отображаются серые полосы. Ниже приведен код, который я использовал для создания этого приложения:

from Tkinter import *
import Image
import ImageTk

class Application(Frame):
    def __init__(self, master=None):

        Frame.__init__(self, master)
        self.pack()
        self.createWidgets()

    def createWidgets(self):

        mainframe = self
        mainframe.grid(column=0, row=0, sticky=(N, W, E, S))
        mainframe.columnconfigure(0, weight=1)
        mainframe.rowconfigure(0, weight=1)

        img = Image.open("N:/temp/test.png")
        imgTk = ImageTk.PhotoImage(img)
        imgLabel = Label(mainframe, image=imgTk)
        imgLabel.image = imgTk
        imgLabel.pack(side="bottom", expand="no")
        imgLabel.grid(column=1, row=1, sticky=W, padx=(10, 10), pady=(6, 0))

def on_closing():
    root.destroy()

root = Tk()
root.title("Test")
root.protocol("WM_DELETE_WINDOW", on_closing)
app = Application(master=root)
app.mainloop()

Итак, если у кого-то будет предложение, как устранить ошибку импорта и как правильно отображать изображение в приложении Tkinter, я бы был очень признателен!

...