Форум сайта python.su
imgToolBarOpen = ImageTk.PhotoImage(file="open_25.png") butToolBarOpen = Button(myToolBar, image=imgToolBarOpen, command=onClick_ButOpen_ToolBar) butToolBarOpen.pack()
Офлайн
nick789можно превратить картинку в набор байтов или даже строку, а потом соотвевенно обратно.
Это как то Возможно ?
import base64 with open("test.png", "rb") as imageFile: str = base64.b64encode(imageFile.read()) print (str) fh = open("test2.png", "wb") fh.write(base64.b64decode(str)) fh.close()
[code python][/code]
Отредактировано PEHDOM (Фев. 14, 2019 11:05:45)
Офлайн
str=b'iVBORw0KGgoAAAA ... ElFTkSuQmCC' butToolBarOpen = Button(myToolBar, image=str, command=onClick_ButOpen_ToolBar)
imgToolBarOpen = ImageTk.PhotoImage(data=str) >>> Исключение "unhandled OSError" cannot identify image file <_io.BytesIO object at 0x7f00f1d1f620> Файл: /usr/lib64/python3/site-packages/PIL/Image.py, строка: 2687
with open("open_25.png", "rb") as imageFile: str = base64.b64encode(imageFile.read()) imgToolBarOpen = ImageTk.PhotoImage(data=str)
Отредактировано nick789 (Фев. 14, 2019 12:49:13)
Офлайн
nick789, у Вас чуть-чуть есть недопонимание совета от PEHDOM. Он предлагает конвертировать изображение в строку для хранения в файле. Перед использованием - надо провести обратную конвертацию через base64.b64decode(str) и только после этого вставлять в код.
То есть, вместо butToolBarOpen = Button(myToolBar, image=str, command=onClick_ButOpen_ToolBar) надо сделать как-то так: butToolBarOpen = Button(myToolBar, image=base64.b64decode(str), command=onClick_ButOpen_ToolBar).
Для хранения в одном файле множества картинок необходимо предусмотреть какой-либо разделитель типа осмысленного слова “моякартинка” или чего-либо другого. После прочтения всего содержимого из файла: поделить строку по этому разделителю через split и конвертировать требуемый элемент списка в нужном месте кода.
Офлайн
nick789ну нельзя же так буквально ему строку скармливать,
imgToolBarOpen = ImageTk.PhotoImage(data=str)
from tkinter import * from PIL import ImageTk, Image from io import BytesIO import base64 pic = b'iVBOR......' root = Tk() img_tk = ImageTk.PhotoImage(Image.open(BytesIO(base64.b64decode(pic)))) butToolBarOpen = Button(root, image=img_tk) butToolBarOpen.pack() root.mainloop()
RafikЯ бы вообще делал проще, создаем файл например icons.py в нем переменные типа
Для хранения в одном файле множества картинок необходимо предусмотреть какой-либо разделитель типа осмысленного слова “моякартинка” или чего-либо другого. После прочтения всего содержимого из файла: поделить строку по этому разделителю через split и конвертировать требуемый элемент списка в нужном месте кода.
main_icon = b'iVBOR......' open_icon = b'iVBOR......' ... и т.д.
import icons ... open_icon = ImageTk.PhotoImage(Image.open(BytesIO(base64.b64decode(icons.open_icon)))) butToolBarOpen = Button(root, image=open_icon,.....)
[code python][/code]
Отредактировано PEHDOM (Фев. 14, 2019 13:27:08)
Офлайн