#!/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)
我需要一个跨平台的方法..
我使用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.
我有一个简单的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)
它工作正常,我可以看到透明度为方格图案.