Как загрузить jpg qt design
Перейти к содержимому

Как загрузить jpg qt design

  • автор:

Q&A: How do I display an Image in PyQt5/PySide2?
Using QLabel to easily add images to your applications

Adding images to your application is a common requirement, whether you’re building an image/photo viewer, or just want to add some decoration to your GUI. Unfortunately, because of how this is done in Qt, it can be a little bit tricky to work out at first.

In this short tutorial, we will look at how you can insert an external image into your PyQt5/Pyside2 application layout, using both code and Qt Designer.

Which widget to use?

Since you’re wanting to insert an image you might be expecting to use a widget named QImage or similar, but that would make a bit too much sense! QImage is actually Qt’s image object type, which is used to store the actual image data for use within your application. The widget you use to display an image is QLabel .

The primary use of QLabel is of course to add labels to a UI, but it also has the ability to display an image — or pixmap — instead, covering the entire area of the widget. Below we’ll look at how to use QLabel to display a widget in your applications.

Using Qt Designer

First, create a MainWindow object in Qt Designer and add a «Label» to it. You can find Label at in Display Widgets in the bottom of the left hand panel. Drag this onto the QMainWindow to add it.

MainWindow with a single QLabel addedMainWindow with a single QLabel added

Next, with the Label selected, look in the right hand QLabel properties panel for the pixmap property (scroll down to the blue region). From the property editor dropdown select «Choose File…» and select an image file to insert.

As you can see, the image is inserted, but the image is kept at its original size, cropped to the boundaries of the QLabel box. You need to resize the QLabel to be able to see the entire image.

In the same controls panel, click to enable scaledContents .

When scaledContents is enabled the image is resized to the fit the bounding box of the QLabel widget. This shows the entire image at all times, although it does not respect the aspect ratio of the image if you resize the widget.

Using resources files with Qt designer

I’ve planned writing on this for long but I’ve just been so busy. When I started building GUI programs with Qt designer, this was a big challenge for me for a while but somehow I figured it out on my own.

When creating a GUI project in Qt designer, you need images on some parts of your interface. Qt designer allows you add images that have been included in your resource files. My first pain was “How the heck do I add images to this resource file and where the heck is it?”.

Well I said I figured it out on my own but yet I got the little internet aid. I found out from a search that I needed to have a app.qrc file for my resource files. This was all the information I got.

After failing to create a resource file several times, I decided to try out the “Add new resource file button”

apprc

From this point you can open an existing qrc file or create a new one.

apprc1

Now we can add images as needed to the file

apprc2

Now that’s it. When saved, this creates our app.qrc in the following format:

So far I’ve named my resource file app.qrc. After compiling your ui file with pyuic, it will require a app_rc.py to be imported. In a case where you chose example.qrc for your resource files, a example_rc.py file is expected from the generated UI python modules. To create this resource modules containing binaries of our image data, we have to use pyrcc to compile to python like so:

Now we have successfully made use of our resource files with our GUI program. If you have any additions please don’t hesitate to drop it in the comments.

Inserting an image in GUI using QT Designer

You can start inserting a label. Next, you right click on it an then click «change rich text. «. A new window will pop-up. Click on the figure Icon «Insert figure».

Insert Figure

Now, you have to create a resource file. Click on the Pencil button. Next, click on the «New resource file» button.

enter image description here

Choose a name and a folder (your working directory would be a good choice) to save it.

Now, click on the «Add prefix» button.

enter image description here

Choose a name for it.

Then, click on the «Add file» button.

enter image description here

And there you go! Click «OK» and you figure should be there. Just be aware that you should resize your figure to a proper size before using it.

The easiest way I’ve seen so on :

You drag and drop your Label on your window, select the Label, you’ll see on the right side of your screen the ‘Property Editor’ frame and the ‘QLabel’ menu, you click on pixmap => Choose File. select a file and that’s it.

enter image description here

Make sure you have resized it before, you won’t be able to do so in QtDesigner.

Just for you to know I’m just a beginner on PyQT5 / QtDesigner, so that may not be the proper way to do it.

Как загрузить jpg qt design

Статья «нулевого уровня», но пару примеров кода содержит 🙂

1. Общие принципы
  • QPainter – «рисовальщик» QT, класс-исполнитель команд рисования;
  • QPaintEngine – «движок» рисования, обычно не используемый из кода непосредственно. Он бывает нужен программисту лишь при создании собственных контекстов рисования, отсутствующих в системе;
  • QPaintDevice – контекст рисования (канва), который можно понимать как графическое «полотно», состоящее из пикселов.

В обычных случаях программе достаточно «захватить» адрес объекта контекста, отрисовать нужные графические примитивы и освободить контекст:

Здесь рисуется заштрихованный прямоугольник на канве текущего виджета. Существенно, что этот код должен выполняться из метода paintEvent, который может быть переопределён в любом пользовательском виджете, являющемся наследником имеющего канву класса (см.п.2).

  • Перо QPen – для рисования контуров;
  • Кисть QBrush – для заполнения контуров цветом.

Непосредственно отрисовкой занимаются методы класса QPainter с названиями на draw (drawLine, drawRect, drawPolygon, drawEllipse) или fill (fillRect, fillPath). Кроме настроек пера и кисти, этим методам часто требуется информация о координатах точек, размерах прямоугольников, текущих цветах и т.п. Для хранения всей этой информации в QT предусмотрен ряд геометрических классов, которые ничего не рисуют, но хранят описания размеров или расположений графических объектов. Большинство геометрических классов реализованы «дважды», например, класс QPoint работает с целочисленными координатами точек на плоскости, а QPointF – с вещественными:

Целочисленные и вещественные координаты точки на плоскости

. x (), . y () – получение координат;

. setX (), . setY () – установка координат.

В классах определены сравнения, арифметические действия над координатами

Размер, то есть, совокупность ширины и высоты

. width (), . height () – получить размеры;

. setWidth (), . setHeight () – установить размеры;

. scale () – масштабировать размер.

Прямоугольник, фактически, это " точка+размер "

См. QPoint , QSize

Отрезки на плоскости

. x 1(), . y 1(), . x 2(), . y 2() – координаты начала и конца отрезка;

. dx (), . dy () – проекции на оси 0 X и 0 Y

Многоугольник на плоскости, фактически, массив точек (координат вершин)

<< добавить точку QPoint

. point ( i ) – вернуть i — ую точку

Цвет в модели RGB (или HSV )

. setRgb ( r,g,b ) установить интенсивности цветов;

. red (), . green , . blue (), . alpha () – получить интенсивности цветов и прозрачность

  • translate – сдвинуть начало координат в указанную точку;
  • scale – масштабировать систему координат;
  • rotate – повернуть систему координат;
  • shear – исказить систему координат (выполнить скос);
  • save, restore – сохранить/восстановить состояние рисовальщика.

В большинстве случаев при отрисовке объектов удобнее пользоваться этими методами, чем высчитывать всё в «абсолютных координатах» канвы. Например, мы не меняли геометрию треугольника, определённого в функции drawTriangle и не высчитывали при каждой отрисовке новых координат его вершин:

2. Работа с графической канвой

Создадим проект на основе класса QWidget (добавились файлы main.cpp, widget.h, widget.cpp). Так как отрисовка выполняется по событию paintEvent, в заголовочном файле widget.h нам понадобится добавить прототип виртуального метода paintEvent, предусмотренного в каждом виджете. Чтобы виджет мог рисовать на канве, он должен переопределить этот метод:

В файле widget.cpp нам остается написать реализацию метода. Покажем простейшие действия с кистью, пером и строкой текста:

Теперь класс Widget может рисовать на своей канве. Так как событие paintEvent происходит, в том числе, при изменении размеров окна виджета, картинка всё время будет соответствовать окну формы.

3. Работа с изображениями
  • Format_Invalid — формат неверен;
  • Format_Mono – монохромное изображение с 1 битом на пиксел;
  • Format_Index8 – данные представляют собой 8-битные индексы цветовой палитры;
  • Format_RGB32 – каждый пиксел представлен 32 битами (интенсивности красного, зелёного и синего, плюс значение альфа-канала, всегда равное 0xFF, то есть, прозрачность не поддерживается);
  • Format_ARGB32 – 32 бита на пиксел с поддержкой альфа-канала прозрачности.

Для создания изображения в конструктор класса достаточно передать его размеры в пикселах и формат:

Загрузить изображение можно, передав конструктору путь к нужному файлу:

или воспользовавшись методом load:

Как видно из кода, отобразить изображение можно методом drawImage класса QPainter. Показать часть изображения можно с помощью дополнительных параметров метода.

Папка, которая является текущей, в общем случае зависит от проекта. Обычно это та папка, где находится файл Makefile проекта.

Сохранить изображение может метод save:

Сохранение произойдёт в ту папку, которая является текущей в вашей конфигурации проекта.

Для чтения отдельных пикселов удобен метод pixel:

Записать пикселы можно с помощью метода setPixel:

Показанный код рисует линейный градиент в окне формы, для работы нужны директивы

  • invertPixels – позволяет инвертировать цвета пикселов и/или альфа-канал;
  • scaled – позволяет масштабировать изображение;
  • mirrored – выполняет зеркальное отражение картинки по горизонтали и/или вертикали.

Класс контекстно-зависимого представления изображений QPixmap также унаследован от QPaintDevice. Его использование целесообразно там, где нужен промежуточный буфер для рисования или критична скорость отрисовки графических объектов. Существует также отдельный класс-потомок QBitmap для работы с монохромными изображениями.

4. Построение графиков и диаграмм

Хорошее введение в тему даёт эта статья.

5. «Продвинутый» пример рисования мышью в QT

По всем правилам создаём графическую сцену, таймер и пример простейшей «рисовалки» нажатой левой кнопкой мыши.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *