#python #python-3.x #tkinter #file-io #python-imaging-library
#python #python-3.x #tkinter #file-io #python-imaging-library
Вопрос:
Вот две ошибки
Exception in Tkinter callback
Traceback (most recent call last):
File "C:Usersseif- zizoPycharmProjectspythonProjectvenvlibsite-packagesPILImage.py", line 2895, in open
fp.seek(0)
AttributeError: 'str' object has no attribute 'seek'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:Usersseif- zizoAppDataLocalProgramsPythonPython37-32libtkinter__init__.py", line 1705, in __call__
return self.func(*args)
File "C:/Users/seif- zizo/PycharmProjects/pythonProject/main.py", line 7, in resize
IMG=Image.open(data1,'r')
File "C:Usersseif- zizoPycharmProjectspythonProjectvenvlibsite-packagesPILImage.py", line 2897, in open
fp = io.BytesIO(fp.read())
AttributeError: 'str' object has no attribute 'read'
Вот код, который выдает эти ошибки:
from tkinter import Tk,Label,Entry,Button,RIDGE,SOLID
from PIL import Image
функция, в которой изменяется размер изображения после получения значений из data1, data2, data3, data4
def resize():
IMG=Image.open(data1,'r')
new_image=IMG.resize((data2,data3))
x=new_image.show()
y=new_image.save(data4)
print(x)
Код приложения с графическим интерфейсом:
window=Tk()
window.title("MR RESIZE")
window.iconbitmap(r"C:Usersseif- zizoDownloadsGoogle-Noto-Emoji-Smileys-10104-pile-of-poo.ico")
window.geometry('500x250')
text1=Label(text="IMAGE PATH",background="#E91EDA" ,fg="WHITE",width=22,height=5,relief=SOLID)
text2=Label(text="NEW IMAGE WIDTH",background="#2471A3" ,fg="WHITE",width=22,height=5,relief=SOLID)
text3=Label(text="NEW IMAGE HEIGHT",background="#1738B2" ,fg="WHITE",width=22,height=5,relief=SOLID)
text4=Label(text="SAVE IMAGE AS",background="#24B41B",fg="WHITE",width=22,height=5,relief=SOLID)
text1.grid(row=0,column=0,padx=5)
text2.grid(row=0,column=1,padx=5)
text3.grid(row=0,column=2,padx=5)
text4.grid(row=0,column=3,padx=5)
entry1=Entry(width=20,relief=RIDGE,borderwidth=3)
entry2=Entry(width=20,relief=RIDGE,borderwidth=3)
entry3=Entry(width=20,relief=RIDGE,borderwidth=3)
entry4=Entry(width=20,relief=RIDGE,borderwidth=3)
entry1.grid(row=1,column=0,padx=5,pady=5)
entry2.grid(row=1,column=1,padx=5,pady=5)
entry3.grid(row=1,column=2,padx=5,pady=5)
entry4.grid(row=1,column=3,padx=5,pady=5)
data1=entry1.get()
data2=entry2.get()
data3=entry3.get()
data4=entry4.get()
enter_btn=Button(text='ENTER',width=15,command=resize)
enter_btn.grid(row=2,columnspan=2,column=1,padx=5,pady=5)
for i in range(4):
window.columnconfigure(i, weight=1, minsize=30)
window.rowconfigure(i, weight=1, minsize=30)
window.mainloop()
В приведенном выше коде я пытаюсь изменить масштаб изображения, а затем вывести новое изображение после его изменения масштаба. Проблема в том, что я получаю эти две ошибки и не знаю, что делать. Как я могу исправить этот код?
Комментарии:
1.
IMG=Image.open(data1,'r')
чтоdata1
? Какую версию PIL вы используете?2. Это потому
data1
, что это пустая строка, поскольку вы вызвалиdata1=entry1.get()
сразу после созданияentry1
.
Ответ №1:
Это потому data1
, что это пустая строка, поскольку вы вызвали data1=entry1.get()
сразу после создания entry1
.
Вы должны вызвать data1 = entry1.get()
inside resize()
(то же самое для data2
.. data4
):
def resize():
data1 = entry1.get().strip()
data2 = entry2.get().strip()
data3 = entry3.get().strip()
data4 = entry4.get().strip()
if data1 and data2 and data3 and data4:
try:
data2 = int(data2)
data3 = int(data3)
IMG=Image.open(data1,'r') # 'r' is not necessary
new_image=IMG.resize((data2,data3))
new_image.show()
new_image.save(data4)
except ValueError:
print('Invalid value of width or height')
else:
print('Empty value found')