Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 29, 2015 14:43:44

Devilhunter
Зарегистрирован: 2015-10-29
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Скриншот огромного окна [Python 3.X][PyQt5]

Всем привет! Меня зовут Devilhunter и я новичок!
Шутки в сторону.
Я собираюсь написать скрипт в Python 3, который будет строить некоторый график/гистограмму в главном окне (или в QScrollArea) (окно ранее создано в Qt Designer 5 и конверитруется в *.py). Вероятно, график будет больше, чем размер экрана (например, 2k на 3k пикселей). График генерируется кодом из прогесс-баров, лейблов, горизонтальных и вертикальных линий и т.д. Как можно сохранить снимок этого окна?

Например.

  1. Пользователь загружает данные из файла и изменяет некоторые настройки.
  2. Python строит график.
  3. Пользователь нажимает “сохранить график”.
  4. Python сохраняет “график.png”.
  5. Конец.

Для Qt5 предлагают использовать QWidget.grab(), но я не пойму как это написать в коде.
Вот заготовка кода главного окна.
import sys
from WGBbody import * 
from PyQt5 import QtCore, QtGui, QtWidgets
   
class WGBWin(QtWidgets.QMainWindow):    
    def __init__(self, parent=None): 
       QtWidgets.QWidget.__init__(self, parent)
       self.ui = Ui_MainWindow()
       self.ui.setupUi(self)
                    
if  __name__ == "__main__": 
    app = QtWidgets.QApplication(sys.argv)
    WGB = WGBWin()
    WGB.show()
    sys.exit(app.exec_())

WGBbody — интерфейс программы, который был создан в дизайнере и затем сконвертирован в .ру и в котором будет происходить генерация графика.

Офлайн

#2 Окт. 29, 2015 15:36:18

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

Скриншот огромного окна [Python 3.X][PyQt5]

> График генерируется кодом из прогесс-баров, лейблов, горизонтальных и вертикальных линий и т.д.

ЭТО КАК?



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

Офлайн

#3 Окт. 29, 2015 15:46:56

Devilhunter
Зарегистрирован: 2015-10-29
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Скриншот огромного окна [Python 3.X][PyQt5]

Rodegast
> График генерируется кодом из прогесс-баров, лейблов, горизонтальных и вертикальных линий и т.д.ЭТО КАК?
В зависимости от количества исходных данных в окно будет размещено определённое число этих элементов. По сути этот график это гистограмма с горизонтальным размещением элементов. Собственно прогресс-бар и будет элементом гистограммы.
Но график не суть. Вот как заскринить всё это дело, если оно не будет влазить в экран?

Отредактировано Devilhunter (Окт. 29, 2015 15:47:34)

Офлайн

#4 Окт. 29, 2015 20:22:49

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

Скриншот огромного окна [Python 3.X][PyQt5]

> Собственно прогресс-бар и будет элементом гистограммы.

Не предназначены виджеты для того что-бы из них графики строили. Если нужен график то вручную рисуй его. Если рисовать не хочеш/умееш, то оспользуй http://www.pyqtgraph.org/



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

Офлайн

#5 Окт. 29, 2015 20:48:06

Devilhunter
Зарегистрирован: 2015-10-29
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Скриншот огромного окна [Python 3.X][PyQt5]

Rodegast
> Собственно прогресс-бар и будет элементом гистограммы. Не предназначены виджеты для того что-бы из них графики строили. Если нужен график то вручную рисуй его. Если рисовать не хочеш/умееш, то оспользуй http://www.pyqtgraph.org/
Хорошо. Это не суть. Скриншот окна все равно нужно сделать. Интересует как пользоваться командой QWidget.grab()

Офлайн

#6 Окт. 29, 2015 22:10:15

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

Скриншот огромного окна [Python 3.X][PyQt5]

> Скриншот окна все равно нужно сделать.

pix = QtGui.QPixmap(widget.size())
widget.render(pix)
pix.save("/home/rodegast/save.png")



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

Офлайн

#7 Ноя. 2, 2015 11:00:38

Devilhunter
Зарегистрирован: 2015-10-29
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Скриншот огромного окна [Python 3.X][PyQt5]

Rodegast
> Скриншот окна все равно нужно сделать.
Спасибо большое! Это то, что нужно.

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version