Уведомления

Группа в Telegram: @pythonsu

#1 Май 10, 2012 15:17:58

AliasNameless
От:
Зарегистрирован: 2010-09-15
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Прозрачный фон окна QtGui.QMainWindow

В целом задача такая:
Имеется QMainWindow с единственным виджетом QWebView

Нужно:
1. Загрузить отрисованное веб содержимое из QWebView в QPixmap (например QPixmap.grabWidget)
2. Сделать из QPixmap маску с прозрачным белым цветом (QPixmap.createMaskFromColor)
3. Наложить маску на веб содержимое

Таким образом должно получится окно с QWebView в котором белый фон - прозрачный.

Я споткнулся на первом этапе:

#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
from PyQt4 import QtCore, QtGui, QtWebKit
       
app = QtGui.QApplication(sys.argv)
mw = QtGui.QMainWindow()
web = QtWebKit.QWebView(mw)
web.load(QtCore.QUrl.fromLocalFile("C:/Python27/prog/test.html"))
web.resize(300,200)
mw.show()
pix = QtGui.QPixmap()
pix=pix.grabWidget(web)
pix.save("test.png")
app.exec_()
В результате test.png - белый квадрат в размер виджета (300,200)

Возможно я чего то перемудрил и есть другие способы добиться прозрачного фона веб содержимого QWebView???



Отредактировано AliasNameless (Май 10, 2012 15:18:57)

Офлайн

#2 Май 10, 2012 15:58:34

reclosedev
От: Н.Новгород
Зарегистрирован: 2012-03-29
Сообщения: 870
Репутация: +  173  -
Профиль   Отправить e-mail  

Прозрачный фон окна QtGui.QMainWindow

Просто у вас не успевает страница загрузится, поэтому и сохраняется белый квадрат. Нужно повесить обработчик на сигнал loadFinished:

...
def on_load_finished(ok):
    pix = QtGui.QPixmap.grabWidget(web)
    pix.save("test.png")
    
web.loadFinished.connect(on_load_finished)
mw.show()
app.exec_()

Офлайн

#3 Май 10, 2012 17:08:23

AliasNameless
От:
Зарегистрирован: 2010-09-15
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Прозрачный фон окна QtGui.QMainWindow

Спасибо, никогда бы не додумался!



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version