Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 8, 2023 14:02:42

Temp
Зарегистрирован: 2021-01-16
Сообщения: 75
Репутация: +  1  -
Профиль   Отправить e-mail  

PyQt5 скриншот виджета

Доброго времени суток!
Код следующий:

 image = QtGui.QImage(self.ui.my_table_widget.grab())
QtWidgets.QApplication.clipboard().setImage(image, QClipboard.Clipboard)
код адекватно делает скрин виджета и отправляет его в буфер обмена, но скриншот делается исключительно по размерам виджета, не больше, ни меньше.
Если элементов в списке больше, чем может поместится в геометрию виджета (появляется скроллбар), то они не попадают в скриншот. Как исправить?

Офлайн

#2 Апрель 9, 2023 23:33:27

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2751
Репутация: +  184  -
Профиль   Отправить e-mail  

PyQt5 скриншот виджета

Перед скриншотом меняй геометрию окна что бы всё уместилось. Иначе никак.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#3 Апрель 10, 2023 08:58:39

Temp
Зарегистрирован: 2021-01-16
Сообщения: 75
Репутация: +  1  -
Профиль   Отправить e-mail  

PyQt5 скриншот виджета

Rodegast
Перед скриншотом меняй геометрию окна что бы всё уместилось. Иначе никак.
Нашел следующее решение:
Пихаем table widget в scroll area ставим в нем lay out
В resizeEvent насильно меняем высоту и ширину table widget относительно его содержимого
теперь будем делать скрин не table widget, а scroll area, так как там можно сделать так
 image = QtGui.QImage(self.ui.scrollArea.widget().grab())
QtWidgets.QApplication.clipboard().setImage(image, QClipboard.Clipboard)
и на выходе получаем нужного размера скриншот всей таблицы почти без костылей, правильно подогнав размеры таблицы к scroll area, этого костыля не видно.



Офлайн

#4 Апрель 10, 2023 19:17:21

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2751
Репутация: +  184  -
Профиль   Отправить e-mail  

PyQt5 скриншот виджета

> Нашел следующее решение

Не факт что это решение будет работать со всеми виджетами. В виджете может быть отрисовка только видимой части и тогда ты будешь грабить только то что видит пользователь.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#5 Апрель 11, 2023 06:28:01

Temp
Зарегистрирован: 2021-01-16
Сообщения: 75
Репутация: +  1  -
Профиль   Отправить e-mail  

PyQt5 скриншот виджета

Rodegast
> Нашел следующее решениеНе факт что это решение будет работать со всеми виджетами. В виджете может быть отрисовка только видимой части и тогда ты будешь грабить только то что видит пользователь.
Так весь прикол в том что из-за того что это не работает со всеми виджетами и была создана эта тема.
Но работает со scroll area, а в него в свою очередь пихаешь необходимый виджет. Это так сказать костыль, и он на мой взгляд лучше того костыля, что ты предложил про изменение геометрии окна под виджет, да и в окне помимо данного виджета будет куча других.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version