Форум программистов, компьютерный форум, киберфорум
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.65/75: Рейтинг темы: голосов - 75, средняя оценка - 4.65
0 / 0 / 1
Регистрация: 30.05.2013
Сообщений: 69

создать программку упрощённый Paint

22.12.2016, 01:47. Показов 14808. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ребят помогите:
Сделать програму с графическим интерфейсом для реализации простого графического редактора.(Возможность рисовать линии, прямоугольники, елипсы, данного цвета и толщины и цветом границы. Сохранять изображение и открывать существующие)
вот что есть (пока что только линни)
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
from tkinter import *
 
 
def keyPressHandler(event):
    print(event.char, 'код =', event.keycode)
 
 
class MyLine:
    def __init__(self, line_id, start_x, start_y):
        self._id = line_id
        self._start_x = start_x
        self._start_y = start_y
 
 
lineUnderCreation = None
 
 
def mouseButton1PressHandler(event):
    # создаём новую линию
    global lineUnderCreation
    canv = event.widget
    line_id = canv.create_line(event.x, event.y, event.x, event.y)
    lineUnderCreation = MyLine(line_id, event.x, event.y)
 
 
def mouseButton1ReleaseHandler(event):
    global lineUnderCreation
    lineUnderCreation = None
 
 
def mouseMotionHandler(event):
    canv = event.widget
    if event.state == 256:
        # зажата левая кнопка мышки - меняем создаваемую линию
        canv.delete(lineUnderCreation._id)
        line_id = canv.create_line(lineUnderCreation._start_x,
                                   lineUnderCreation._start_y,
                                   event.x, event.y)
        lineUnderCreation._id = line_id
 
 
root = Tk()
mainFrame = Frame(root)
 
canv = Canvas(mainFrame, bg='white', cursor='pencil')
canv["width"] = 600
canv["height"] = 600
 
canv.bind("<KeyPress>", keyPressHandler)
canv.bind("<Motion>", mouseMotionHandler)
canv.bind("<Button-1>", mouseButton1PressHandler)
# canv.bind("<Button-1>", mouseButton1ReleaseHandler)
 
canv.pack()
mainFrame.pack()
 
canv.focus()
root.mainloop()
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.12.2016, 01:47
Ответы с готовыми решениями:

Создать нейросеть по распознаванию рукописных чисел(в paint например). Числа брать только 0 и 1
Импортируем картинку саму в код и он ее должен распознать.(0 или 1)

Добавить справку в Paint. Создать графический интерфейс - прототип Paint - в Delphi
добавить справку в Paint .создать графический интерфейс прототип Paint в Delfi. Помогите плиз

Создать меню с командами Size, Color, Paint, Quit. При запуске приложения сделать недоступной команду Paint
Создать меню с командами Size, Color, Paint, Quit. При запуске приложения сделать недоступной команду Paint. При выборе команды Quit...

1
0 / 0 / 1
Регистрация: 30.05.2013
Сообщений: 69
25.12.2016, 21:50  [ТС]
чуть продвинулся уже есть код овала ручки и линии

вот основа (нужно что бы можно было выбрать фигуру и ей задавать размер рамки и цвет )
пока что кнопки выбора фигуры не работают помогите (есть отдельные коды для рисования линии и овала ещё нужно прямоугольник и запихнуть в основной код)
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
from tkinter import *
 
 
class Paint(Frame):
    def __init__(self, parent):
        Frame.__init__(self, parent)
        self.parent = parent
        self.setUI()
        self.brush_size = 10
        self.brush_color = "black"
        self.figure=self.canv.create_oval
 
    def draw(self, event):
        self.canv.create_oval(event.x - self.brush_size,
                              event.y - self.brush_size,
                              event.x + self.brush_size,
                              event.y + self.brush_size,
                              fill=self.color, outline=self.color)
    def set_color(self, new_color):
        self.color = new_color
 
    def set_brush_size(self, new_size):
        self.brush_size = new_size
 
    def set_figure(self, new_figure):
        self.figure = new_figure
 
 
    def setUI(self):
        self.parent.title("Epic PyPaint")  # Устанавливаем название окна
        self.pack(fill=BOTH, expand=1)  # Размещаем активные элементы на родительском окне
 
        self.columnconfigure(6,
                             weight=1)  # Даем седьмому столбцу возможность растягиваться, благодаря чему кнопки не будут разъезжаться при ресайзе
        self.rowconfigure(2, weight=1)  # То же самое для третьего ряда
 
        self.canv = Canvas(self, bg="white")  # Создаем поле для рисования, устанавливаем белый фон
        self.canv.grid(row=2, column=0, columnspan=7,
                       padx=5, pady=5,
                       sticky=E + W + S + N)  # Прикрепляем канвас методом grid. Он будет находится в 4м ряду, первой колонке, и будет занимать 7 колонок, задаем отступы по X и Y в 5 пикселей, и заставляем растягиваться при растягивании всего окна
        self.canv.bind("<B1-Motion>", self.draw)
 
        clear_btn = Button(self, text="Clear all", width=10, command=lambda: self.canv.delete("all"))
        clear_btn.grid(row=0, column=6, sticky=W)
 
        color_lab = Label(self, text="Color: ")  # Создаем метку для кнопок изменения цвета кисти
        color_lab.grid(row=0, column=0,
                       padx=6)  # Устанавливаем созданную метку в первый ряд и первую колонку, задаем горизонтальный отступ в 6 пикселей
 
        red_btn = Button(self, text="Red", width=10, command=lambda: self.set_color("red"))
                                # Создание кнопки:  Установка текста кнопки, задание ширины кнопки (10 символов)
        red_btn.grid(row=0, column=1)  # Устанавливаем кнопку первый ряд, вторая колонка
 
        # Создание остальных кнопок повторяет ту же логику, что и создание
        # кнопки установки красного цвета, отличаются лишь аргументы.
 
        green_btn = Button(self, text="Green", width=10, command=lambda: self.set_color("green"))
        green_btn.grid(row=0, column=2)
 
        blue_btn = Button(self, text="Blue", width=10, command=lambda: self.set_color("blue"))
        blue_btn.grid(row=0, column=3)
 
        black_btn = Button(self, text="Black", width=10, command=lambda: self.set_color("black"))
        black_btn.grid(row=0, column=4)
 
        white_btn = Button(self, text="White", width=10, command=lambda: self.set_color("white"))
        white_btn.grid(row=0, column=5)
 
        size_lab = Label(self, text="Brush size: ")  # Создаем метку для кнопок изменения размера кисти
        size_lab.grid(row=1, column=0, padx=5)
        one_btn = Button(self, text="Two", width=10, command=lambda: self.set_brush_size(2))
        one_btn.grid(row=1, column=1)
 
        two_btn = Button(self, text="Five", width=10, command=lambda: self.set_brush_size(5))
        two_btn.grid(row=1, column=2)
 
        five_btn = Button(self, text="Seven", width=10, command=lambda: self.set_brush_size(7))
        five_btn.grid(row=1, column=3)
 
        seven_btn = Button(self, text="Ten", width=10, command=lambda: self.set_brush_size(10))
        seven_btn.grid(row=1, column=4)
 
        ten_btn = Button(self, text="Twenty", width=10, command=lambda: self.set_brush_size(12))
        ten_btn.grid(row=1, column=5)
 
        twenty_btn = Button(self, text="Fifty", width=10, command=lambda: self.set_brush_size(15))
        twenty_btn.grid(row=1, column=6, sticky=W)
 
        color_lab = Label(self, text="Figure:")  # Создаем метку для кнопок изменения фигуры рисования
        color_lab.grid(row=3, column=0,)
 
        figure = Button(self, text='pan', width=10, command=lambda: self.set_figure("pan") )
        figure.grid(row=3, column=1, sticky=W)
 
        figure = Button(self,text = 'line', width=10, command = lambda: self.set_figure("line"))
        figure.grid(row = 3, column = 2,sticky=W)
 
        figure = Button(self,text = 'oval', width=10, command = lambda: self.set_figure("oval") )
        figure.grid(row = 3, column = 3,sticky=W)
 
        figure = Button(self,text = 'rectangle', width=10, command = lambda: self.set_figure("rectangle"))
        figure.grid(row = 3, column = 4,sticky=W)
def main():
    root = Tk()
    root.geometry("720x480+300+300")
    app = Paint(root)
    root.mainloop()
if __name__ == "__main__":
    main()
вот код для овалов
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
from tkinter import *
 
trace = 0
 
 
class oval:
    def __init__(self, parent=None):
        canvas = Canvas(width=300, height=300, bg='white')
        canvas.pack()
        canvas.bind('<ButtonPress-1>', self.onStart)
        canvas.bind('<B1-Motion>', self.onGrow)
        canvas.bind('<Double-1>', self.onClear)
        canvas.bind('<ButtonPress-3>', self.onMove)
        self.canvas = canvas
        self.drawn = None
 
    def onStart(self, event):
        self.start = event
        self.drawn = None
 
    def onGrow(self, event):
        canvas = event.widget
        if self.drawn: canvas.delete(self.drawn)
        objectId = canvas.create_oval(self.start.x, self.start.y, event.x, event.y)
        if trace: print
        objectId
        self.drawn = objectId
 
    def onClear(self, event):
        event.widget.delete('all')
 
    def onMove(self, event):
        if self.drawn:
            if trace: print
            self.drawn
            canvas = event.widget
            diffX, diffY = (event.x - self.start.x), (event.y - self.start.y)
            canvas.move(self.drawn, diffX, diffY)
            self.start = event
 
 
oval()
mainloop()

а для линий в 1-ом сообщении
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.12.2016, 21:50
Помогаю со студенческими работами здесь

создать программку. у меня есть программа от гугла голосовой блокнот нужно чтобы текст копировался во 2 программку которая отправл
помогите пожалуйста создать программку. у меня есть программа от гугла голосовой блокнот нужно чтобы текст копировался во 2 программку...

Создать программу, имитирующую упрощенный алгоритм поиска контактов, введенных с использованием последовательности чисел
Всем привет я начинающий в языке Си , помогите написать программу Нужен список людей фамилия Имя и номер телефона и поиск по этому...

Создать программку!
I. Типизированные файлы Написать приложение, позволяющее создавать целочисленный файл, выводить его в многострочный редактор текстов,...

Открыть картинку в Paint или Paint Net если установлен
Здравствуйте. Как можно открыть картинку в программе Paint или если существует в Paint net И еще вопрос как узнать установлен ли Paint...

Как создать программку?
Помогите пожалуйста, как создать программу которая будет данные посылать на страницу сайта? Добавлено через 1 минуту Допустим: ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru