Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > Python
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.05.2022, 17:12   #1
AleksandrB00
Пользователь
 
Регистрация: 30.05.2022
Сообщений: 37
По умолчанию ООП Python

Здравствуйте, пытаюсь вникнуть в ООП, поэтому прошу строго не судить.
Суть скрипта заключается в том, что у меня есть таблица Excel с данными, мне необходимо взять значение определённой ячейки и вставить на изображение схемы. По задумке хочу передать в класс Excel все параметры (имя файла, координату ячейки, координаты x и y для вставки на изображение), в классе Excel есть функция, которая возвращает значение ячейки, далее оно передаётся в класс Get_Image, где функция рисует значение на изображении. Не понимаю как передать значение ячейки в класс Get_Image, а также не понимаю каким образом это всё вызывать.

Код:
from PIL import Image, ImageDraw, ImageFont
from openpyxl import load_workbook

class Excel:
def __init__(self, file_name, cell_number, coordinate_x, coordinate_y):
self.file_name = file_name
self.cell_number = cell_number
self.coordinate_x = coordinate_x
self.coordinate_y = coordinate_y

def get_cell_value(self):
wb = load_workbook(filename=self.file_na me, read_only=True)
ws = wb['OD матрица']
value = str(ws[self.cell_number].value)
return value

class Get_Image(Excel):

def draw_image(self):
image = Image.open('Шаблон.jpg')
font = ImageFont.truetype("arial.ttf", 25)
drawer = ImageDraw.Draw(image)
drawer.text((self.coordinate_x, self.coordinate_y), Здесь должно быть значение value, font=font, fill='black')
image.save('new_img.jpg')
image.show()

test = Excel('2.xlsx', 'B4', 1118, 309)
#Здесь хочу вводить большое кол-во условий и не понимаю как всё это вызвать и можно ли вообще это сделать?
Не совсем понимаю как работает ООП и возможно занимаюсь ерундой, так как небольшая каша в голове, возможно проще всё это делать без классов, но хочется понять как это всё работает, поэтому как-то так...

Последний раз редактировалось AleksandrB00; 30.05.2022 в 17:24.
AleksandrB00 вне форума Ответить с цитированием
Старый 30.05.2022, 17:31   #2
AleksandrB00
Пользователь
 
Регистрация: 30.05.2022
Сообщений: 37
По умолчанию

Путём проб и ошибок нашёл решение, поэтому хотел бы узнать насколько это вообще адекватно?

Код:
from PIL import Image, ImageDraw, ImageFont
from openpyxl import load_workbook

class Excel(object):
    def __init__(self, file_name, cell_number, coordinate_x, coordinate_y):
        self.file_name = file_name
        self.cell_number = cell_number
        self.coordinate_x = coordinate_x
        self.coordinate_y = coordinate_y

    def get_cell_value(self):
        wb = load_workbook(filename=self.file_name, read_only=True)
        ws = wb['OD матрица']
        value = str(ws[self.cell_number].value)
        return value

class Get_Image(Excel):
    def draw_image(self):
        image = Image.open('Шаблон.jpg')
        font = ImageFont.truetype("arial.ttf", 25)
        drawer = ImageDraw.Draw(image)
        drawer.text((self.coordinate_x, self.coordinate_y), Excel.get_cell_value(self), font=font, fill='black')
        image.save('new_img.jpg')
        image.show()

test = Get_Image('2.xlsx', 'B4', 1118, 309)
test.draw_image()
AleksandrB00 вне форума Ответить с цитированием
Старый 31.05.2022, 03:36   #3
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Если делать именно два класса, то атрибуты coordinate_x и coordinate_y делал бы у класса Get_Image. Или засунул бы всё в один класс (не запускал, но примерно так):
Код:
from PIL import Image, ImageDraw, ImageFont
from openpyxl import load_workbook

class Excel(object):
    def __init__(self, file_name, cell_number, coordinate_x, coordinate_y):
        self.file_name = file_name
        self.cell_number = cell_number
        self.coordinate_x = coordinate_x
        self.coordinate_y = coordinate_y

    def get_cell_value(self):
        wb = load_workbook(filename=self.file_name, read_only=True)
        ws = wb['OD матрица']
        value = str(ws[self.cell_number].value)
        return value

    def draw_image(self):
        image = Image.open('Шаблон.jpg')
        font = ImageFont.truetype("arial.ttf", 25)
        drawer = ImageDraw.Draw(image)
        drawer.text((self.coordinate_x, self.coordinate_y), self.get_cell_value(), font=font, fill='black')
        image.save('new_img.jpg')
        image.show()

test = Excel('2.xlsx', 'B4', 1118, 309)
test.draw_image()
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 31.05.2022, 10:15   #4
AleksandrB00
Пользователь
 
Регистрация: 30.05.2022
Сообщений: 37
По умолчанию

Спасибо
AleksandrB00 вне форума Ответить с цитированием
Старый 31.05.2022, 10:33   #5
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,040
По умолчанию

здравствуйте, подскажите, опробовал код в посту 3
результат то какой должен быть?
открывает только файл Шаблон.jpg, файл 2.xlsx не редактируется, спасибо
Ципихович Эндрю вне форума Ответить с цитированием
Старый 31.05.2022, 10:37   #6
AleksandrB00
Пользователь
 
Регистрация: 30.05.2022
Сообщений: 37
По умолчанию

Здравствуйте, файл 2.xlsx не должен редактироваться, из него вытаскивается значение заданной ячейки, после это значение помещается на изображение Шаблон.jpg по заданным координатам х и y.
AleksandrB00 вне форума Ответить с цитированием
Старый 31.05.2022, 10:44   #7
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,040
По умолчанию

понял, значит последняя строка пояснение=
Код:
print('Из файла 2.xlsx из заданной ячейки B4 надпись добавляется в файл Шаблон.jpg согласно заданных координат 1118, 309')
было у меня в ячейке "привет" - не добавилось на джепеговское изображение
Ципихович Эндрю вне форума Ответить с цитированием
Старый 31.05.2022, 10:48   #8
AleksandrB00
Пользователь
 
Регистрация: 30.05.2022
Сообщений: 37
По умолчанию

Возможно у вас неправильно заданы координаты (Ваше изображение может быть меньше моего, проверьте в координаты в paint)
AleksandrB00 вне форума Ответить с цитированием
Старый 31.05.2022, 11:01   #9
Ципихович Эндрю
Старожил
 
Регистрация: 24.01.2011
Сообщений: 3,040
По умолчанию

Цитата:
Сообщение от AleksandrB00 Посмотреть сообщение
Возможно у вас неправильно заданы координаты (Ваше изображение может быть меньше моего, проверьте в координаты в paint)
ок, так и есть, изменил на
Код:
test = Excel('2.xlsx', 'B4', 1, 2)
и получил файл new_img.jpg с добавленной надписью, спасибо
Ципихович Эндрю вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Python - как установить Easy-Machine-Learning-Object-Detection при уже установленном Python 3.9 Krasi Общие вопросы по программированию, компьютерный форум 4 23.12.2021 15:49
vk bot Python FriLDD Python 1 25.12.2019 14:00
[Python] Нужно решить в среду вечером 5 -6 заданий для начинающих на языку Python. Пример заданий смогу выслать. Задания на английском языке. foxylen Фриланс 2 17.03.2019 12:30
Начальный уровень Python. Функции - Python YYYUUU Python 5 09.06.2017 12:09
из Python в C++ gio1592 Общие вопросы C/C++ 0 09.04.2012 14:52