相关疑难解决方法(0)

有没有办法在 pyqt5 或 qt5 中截取窗口的屏幕截图?

#!/usr/bin/env python3
from PyQt5.QtGui import *
from PyQt5.QtWidgets import QApplication, QWidget
import sys

app = QApplication(sys.argv)
screen = QApplication.primaryScreen()
widget = QWidget()

screenshot = screen.grabWindow(0, 0, 0, 100, 100)
screenshot.save('shot', 'jpg')
Run Code Online (Sandbox Code Playgroud)

我如何使用它来获得一个窗口?它只得到屏幕的一部分:

screenshot = screen.grabWindow( widget.winId() )
Run Code Online (Sandbox Code Playgroud)

我需要一个跨平台的方法..

python pyqt qt5 pyqt5

7
推荐指数
1
解决办法
1万
查看次数

Python打开html文件,截屏,裁剪并保存为图像

我使用Bokeh包生成地图以显示模拟结果.输出是具有交互性的html格式的单独地图.各个地图需要交互性.

请参阅此链接以获取示例:

http://bokeh.pydata.org/en/0.10.0/docs/gallery/texas.html

模拟可以自动设置为运行多次,并为每次运行生成一个映射.这可能是100的地图.我希望能够将地图拼接在一起以创建电影 - 这不需要交互性.Bokeh具有通过浏览器创建PNG文件的功能,因此可以手动将每个地图保存为文件,并使用ffmpeg创建电影.但是,如果你需要为100个文件做这个,那么这不是一个真正的选择.目前没有办法通过Bokeh自动生成PNG文件,但我相信它会在某些时候添加.

所以我需要一个解决方法.我的想法是从他们存储在本地驱动器上的位置打开每个html文件,拍摄屏幕截图,裁剪图像以保留所需的部分并保存.但我还没有找到一个有效的解决方案.

裁剪图像很简单:

from PIL import Image

img = Image.open(file_name)
box = (1, 1, 1000, 1000)
area = img.crop(box)
area.save('saved_image', 'jpeg')
Run Code Online (Sandbox Code Playgroud)

我的问题是打开html文件并首先拍摄屏幕截图以提供上述代码.

为此我尝试了以下内容,但都需要URL而不是html文件.另外两个都使用Firefox不适合我,但我已经安装了chrome并适当地修改了代码.

如何在python中使用Selenium WebDriver进行部分截图?

http://www.idiotinside.com/2015/10/20/take-screenshot-selenium-python/

我的代码是:

from selenium import webdriver

driver = webdriver.Chrome()
driver.get('file_name')
driver.save_screenshot('image.png')
driver.quit()
Run Code Online (Sandbox Code Playgroud)

哪个回报:

{"code":-32603,"message":"Cannot navigate to invalid URL"}
Run Code Online (Sandbox Code Playgroud)

显然,文件名不是网址,因此很清楚.如果你把它传递给一个网站,它的工作正常.获取html加载和拍照的任何帮助将不胜感激!它不必涉及Selenium.

html python selenium bokeh

5
推荐指数
2
解决办法
9739
查看次数

将QWidget渲染到QImage会丢失alpha通道

我有一个简单的Qt小部件.这是一个QLabel应用简单的CSS样式.风格的重要部分是圆形边框:

QString css("border-style: solid;"
       "border-width: 3px;"
       "border-radius: 7px;");
Run Code Online (Sandbox Code Playgroud)

它在屏幕上显示得很好.边框之外的标签角落充满透明色,因此在任何背景下看起来都很棒.以下是在另一个小部件(具有深灰色背景颜色)上显示时的外观:

在此输入图像描述

现在,当我像这样将它呈现给QImage时

QImage bitmap(label->size(), QImage::Format_ARGB32);
QPainter painter(&bitmap);
balloon->render(&painter);
bitmap.save("C:/1.png");
Run Code Online (Sandbox Code Playgroud)

我明白了(在图像编辑器中打开图像以清楚地显示问题):

在此输入图像描述

请注意角落周围的透明度是如何保留的.有什么问题?我该如何正确渲染?

PS我试过这个来测试QImage是否能够保存alpha通道,并且我的图像编辑器正确显示它:

bitmap.fill(QColor::fromRgba(qRgba(0, 0, 0, 0)));
bitmap.save("C:/1.png");
Run Code Online (Sandbox Code Playgroud)

它工作正常,我可以看到透明度为方格图案.

qt transparency rendering alpha-transparency qwidget

3
推荐指数
1
解决办法
2894
查看次数