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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.07.2021, 23:21   #1
nubbbbb
Новичок
Джуниор
 
Регистрация: 03.07.2021
Сообщений: 1
По умолчанию отображение квадратов из пикселей на экране и сохранение координат в файл

Доброго времени суток. Я новичек в python хочу реализвать следующее:
1) Пользователь вводит начальную координату для первого квадрата, количество квадратов
Сколько будет строк и столбцов из квадратов, их ширину и высоту
Расстояние между квадратами в строках и столбцах
2) Программа рисует эти квадраты по указанным данным на экране
3) Сохраняет координаты квадратов в файл

Задача кажется простой но когда я начинаю это делать функция отрисовки получается настолько громоздкой что даже стыдно показывать, хочется что то читаемое и лаконичное
nubbbbb вне форума Ответить с цитированием
Старый 05.07.2021, 09:09   #2
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,304
По умолчанию

Цитата:
Сколько будет строк и столбцов из квадратов, их ширину и высоту
1. Вы определитесь с тем, что рисуете - квадраты или прямоугольники.
У квадрата все стороны равны, а углы прямые.

2. Создайте список из начальных параметров, запрошенных у пользователя, а затем, в цикле, читайте список и формируйте необходимые значения для рисования ваших фигур.
Только формулы выведете для получения координат следующего левого верхнего угла фигуры.
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 06.07.2021, 19:26   #3
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,304
По умолчанию

Вот пример:
Код:
# Рисование прямоугольников
# Задано: x, y - левый верхний угол
#         width, height - ширина и высота
#         row, colum - число прямоугольников: строк и столбцов
#         a, b - расстояние между строками и столбцами прямоугольников 
# Используем модуль tkinter
import tkinter as tk

# Используем генератор псевдослучайных целых чисел
# для формирования цвета заливки
from random import randint

# Подключим окно для вывода сообщений
from tkinter.messagebox import askyesno

# Подключим модуль для генерации случайных чисел
from random import randint

def Start(event):
    '''Реакция на клик мышкой на холсте'''
    print('Start')  # Тестовое сообщение

def window_deleted():
    '''Реакция на клик мышкой на знаке [X] - Закрыть'''
    if askyesno("Выход", "Завершить работу?"):
        root.destroy()

# Создаём форму с холстом. Идентификатор формы назовём - root.
# Делаем его из класса Tk() графической библиотеки tkinter
root = tk.Tk()

# Создадим заголовок окна: свойство title
root.title("Демонстрация")

# Обработчик закрытия окна. Нажата кнопка [X]
root.protocol('WM_DELETE_WINDOW', window_deleted)

# Запрещаем менять размеры окна: свойство resizable
root.resizable(False, False)   # Не меняем размер окна

# Делаем окно модальным: выше остальных окон, запущенных приложений,
#  чтобы другие окна не могли его заслонить
root.wm_attributes('-topmost', 1)
#
# Установим начальные параметры холста (ед. изм. - пикселы)
Kp = 0.5  # Масштаб - 50% от дисплея
MaxX = root.winfo_screenwidth() * Kp
MaxY = root.winfo_screenheight() * Kp
#
# Формируем холст
cv = tk.Canvas(root,            # Связь с окном
               width = MaxX,    # Ширина окна
               height = MaxY,   # Высота окна
               bg = "#F0F0F0")    # Цвет заливки окна
# При клике на холсте вызываем функцию Start
# выводится только тестовое сообщение
cv.bind('<Button-1>', Start)

# Компановщик виджетов: grid()
cv.grid(row = 0, columnspan = 1)

# Параметры поля прямоугольников
rectangles = [15, 20, 70, 30, 7, 10, 15, 5]

# <шаг_по_горизонтали> = <ширина_прямоугольника> + <расстояние_между_колонками_прямоугольников>
dx = rectangles[2] + rectangles[7]
# <шаг_по_вертикали> = <высота_прямоугольника> + <расстояние_между_строками_прямоугольников>
dy = rectangles[3] + rectangles[6]

# рисуем слева направо и сверху вниз
yb = rectangles[1]  # первый прямоугольник
for row in range(rectangles[4]):             # по столбцам
    xb = rectangles[0]                       # начальная позиция прямоугольников в строке
    ye = yb + rectangles[3]                  # положение прямоугольника по вертикали
    for colum in range(rectangles[5]):       # по строкам
        xe = xb + rectangles[2]              # координата нижнего правого угла
        color_fill = '#{:06x}'.format(randint(0, 256**3 - 1))   # случайный цвет
        cv.create_rectangle(xb, yb, xe, ye, fill = color_fill)  # рисуем
        xb += dx                             # координата для следующего левого верхнего угла
    yb += dy                                 # начало следующего ряда

root.mainloop()
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как натренировать нейросеть на распознавание картинки разных размеров, для вывода ее координат на экране. odeon16 Фриланс 3 15.11.2020 02:13
Delphi посчитать длину вектора по всем известной формуле (корень из суммы квадратов координат вектора) anna77777 Помощь студентам 2 06.01.2017 03:13
С помощью процедур и функций модуля GRAPH на экране изобразить декартовую систему координат (по осям расставить цифровые значения) Deg Паскаль, Turbo Pascal, PascalABC.NET 3 18.05.2014 19:28
Отображение координат точки Nadina Помощь студентам 3 18.04.2009 10:59