|
3 / 3 / 1
Регистрация: 22.10.2022
Сообщений: 7
|
||||||
Нарисовать домик22.10.2022, 12:50. Показов 16024. Ответов 20
Метки нет (Все метки)
Здравствуйте, я начал изучать Python по учебнику К.Ю.Полякова, и не могу понять что не так в коде. По идее программа должна запросить два числовых значения (координаты), и потом на их основе вывести картинку. Сам код картинки правильный, по учебнику, но непонятно куда вставлять верхнюю его часть. Помогите, подскажите
![]()
0
|
||||||
| 22.10.2022, 12:50 | |
|
Ответы с готовыми решениями:
20
Модуль Graph. Нарисовать домик. Нарисовать узор из окружностей Нарисовать домик Нарисовать домик |
|
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
|
|||||||
| 22.10.2022, 12:57 | |||||||
![]() Добавлено через 35 секунд И home(x, y) снизу убрать Добавлено через 4 минуты Кликните здесь для просмотра всего текста
2
|
|||||||
|
3 / 3 / 1
Регистрация: 22.10.2022
Сообщений: 7
|
||
| 22.10.2022, 13:43 [ТС] | ||
|
Добавлено через 7 минут
0
|
||
|
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
|
|
| 22.10.2022, 14:41 | |
|
1
|
|
|
3 / 3 / 1
Регистрация: 22.10.2022
Сообщений: 7
|
|||||||
| 22.10.2022, 15:14 [ТС] | |||||||
Сообщение было отмечено 8Observer8 как решение
Решение Спасибо что отозвались ![]()
1
|
|||||||
| 22.10.2022, 18:02 | |||||||
|
Переписал на PyQt6 по урокам:
Для запуска примера нужно установить PyQt6 командой:
small-house-qpainter-pyqt6/main.py
2
|
|||||||
| 22.10.2022, 23:20 | |||||||||||
|
Преимущество PyQt6 в том, код на нём легко переправить на Qt6 C++, чтобы собрать не такой большой EXE, как с помощью PyInstaller: small-house-qpainter-qt6-cpp-exe.zip (7.25 Мб) Qt6 C++ позволяет без больших трудозатрат собирать APK для Android. Введение в Qt6 C++: https://zetcode.com/gui/qt5/
main.cpp
3
|
|||||||||||
| 22.10.2022, 23:28 | |
|
Скриншот выше не обновил, где включил папку platforms с qwindows.dll
1
|
|
| 23.10.2022, 02:32 | ||||||
|
Ещё одно преимущество PyQt6 в том, что QPainter сильно похож Canvas API, поэтому несложно сделать веб-версию своего приложения, которая может быть развёрнута, например, на бесплатном хостинге GitHub Pages и будет запускаться в один клик на всех ОС, где есть браузер, в том числе на мобильных устройствах. Демка в песочнице: https://plnkr.co/edit/sLfUEO4fTHJQ2gSs
Итого, получается, что:
index.html
2
|
||||||
|
3 / 3 / 1
Регистрация: 22.10.2022
Сообщений: 7
|
||
| 01.11.2022, 16:09 [ТС] | ||
2
|
||
| 01.11.2022, 19:27 | ||
|
4
|
||
| 10.11.2022, 20:53 | |||||||
|
В PyQt есть обёртка над OpenGL. В перспективе можно рисовать не только в 2D, но и в 3D. На базовом уровне ничего сложного в OpenGL нет. Объекты рисуются треугольниками. Даже линию/отрезок нужно рисовать двумя треугольниками, которые образуют прямоугольник с малой высотой. Можно один раз задать прямоугольник, а потом трансформировать его с помощью использования класса QMatrix4x4. Координаты треугольников объекта задаются в массиве. Вершинный шейдер берёт последовательно координаты вершин из массива, а фрагментный шейдер пробегается по пикселям и задаёт цвет пикселя. Цвет можно передать через переменную в фрагментный шейдер.
Пример создания пустого окна с заданным цветом холста. Для запуска примера нужно поставить пакеты:
1
|
|||||||
| 10.11.2022, 20:59 | ||||||||||||||||
|
Можно избавиться от написания "gl.", если импортировать из PyOpenGL так:
1
|
||||||||||||||||
| 10.11.2022, 22:21 | ||||||||||||||||||
|
Пример рисования двух прямоугольников с заданными координатами, размерами, углом поворота и цветами на PyQt6 и OpenGL3
На OpenGL можно самому определить систему координат. Можно где угодно расположить начало системы координат - в любой точке холста и любое направление осей. В данном случае, я как и в примерах темы расположил начало системы координат в верхнем левом углу, а ось Y направил вниз:
2
|
||||||||||||||||||
| 07.12.2022, 14:54 | ||||||||||||||||
|
Немного поясню пример выше с шейдерным OpenGL. Конечно, наверное, лучше сначала было на нешейдерном нарисовать. В шейдерном определяют массив вершин треугольников, который сохраняют в оперативную память видеокарты. Шейдеры компилируются и отправляются тоже в оперативную память видеокарты. Далее, при вызове метода glDrawArrays графический процессор видеокарты (GPU) запускает вершинный шейдер для каждой вершины треугольника. Вершины по очереди попадают в переменную aPosition. Матрица Projection * View * Model умножается на каждую вершину. Фрагментный шейдер вызывается для каждого пикселя, устанавливая цвет пикселя.
В примере выше создан класс Widget, который унаследован от QOpenGLWidget. Это позволило переопределить два метода:
В методе initializeGL() один раз вершины двух прямоугольников копируются в память оперативной памяти видеокарты:
Чем отличаются несколько методов определения треугольников:
2
|
||||||||||||||||
| 07.12.2022, 15:32 | ||||||||||||||||||||||||||
|
Получение доступа к переменным шейдеров
Шейдеры, при каждом запуске программы, один раз компилируются и копируются в оперативную память видеокарты, потому что существуют разные производители видеокарта. В результате компиляции получается объект "program" класса QOpenGLShaderProgram, через который можно получать доступ к шейдерам. В шейдерах есть переменные, которые нужно задать извне: aPosition, uMvpMatrix и uColor. Для доступа к этим шейдерным переменным создаются идентификаторы:
Переменная "uniform" означает, что она общая для всех вершин данного вызова glDrawArrays(), ещё значение устанавливается до вызова glDrawArrays(), например для результирующей матрицы и цвета полигонов:
2
|
||||||||||||||||||||||||||
| 11.01.2023, 18:55 | |||||||
|
Как вариант, на Python можно создать окно на PySDL2, вывести GUI на ImGUI и нарисовать объекты с помощью нешейдерного OpenGL версии 1 со статическим конвейером. Правда, на ImGUI и Python не работает вывод на русском, хотя на C++ работает. Я создал issue по этому поводу: https://github.com/pyimgui/pyimgui/issues/316
main.py
2
|
|||||||
| 11.01.2023, 19:01 | ||
|
Ошибся в названии пакета. Надо было PySDL2 вместо PySDL:
0
|
||
|
1 / 1 / 0
Регистрация: 02.02.2023
Сообщений: 3
|
|
| 02.02.2023, 16:05 | |
|
Друг, спасибо что ты есть, так подробно разжевать вопрос это талант, сам изучаю Python последние 3 месяца и ты очень помог, спасибо!
1
|
|
| 05.02.2023, 16:15 | ||||||||||||||||||||||||||||||||||||
|
Текущий итог моих умозаключений по поводу инструментов для рисования графики. Библиотека PySDL2 хороша, но есть критичные для меня недостатки, об этом ниже. Её API похож на PyGame, так как PyGame использует SDL2. PySDL2 может быть использована как база (окно, клавиатура, мышь) для OpenGL графики для рисования не только в 2D, но и в 3D. Данный домик можно было бы нарисовать в 3D и это необходимо сделать на следующей итерации развития проекта. На этапе релиза проекта PySDL2 можно переписать на SDL С++ (из PyQt значительно проще переписать на Qt C++), чтобы собрать EXE, а также SDL2 позволяет собирать для Android, iOS и для Web в WASM (WebAssembly) с помощью Emscripten SDK. То есть можно иметь у себя на компьютере Python версии приложений, которые проще развивать, чем С++, они занимают мало места, а при необходимости переписывать на C++.
Но есть альтернативный вариант и это PyQt и Qt C++. Этот вариант имеет ряд преимуществ:
Для себя решил, что лучше всего брать OpenGL версии 2 вместо версии 1 и версии 3, потому что у меня почему-то приложения на версии 3 не запускаются на эмуляторе Android (и на железе тоже). OpenGL 2.1 - практически тоже самое, что и OpenGL ES 2.0. Версии 2.1 может быть более чем достаточно для всех задач. Данная задача с домиком очень показательна - надо обязательно как можно чаще делать задачи в сочетании графики с GUI, конечно, если интересна графика.
0
|
||||||||||||||||||||||||||||||||||||
| 05.02.2023, 16:15 | |
|
Помогаю со студенческими работами здесь
20
Нарисовать домик
Нарисовать домик Нарисовать домик нарисовать домик Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Символьное дифференцирование
igorrr37 13.02.2026
/ *
Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2).
Унарный минус обозначается как !
*/
#include <iostream>
#include <stack>
#include <cctype>. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|