从Pyqt的examples中看到一段截图代码, (路径:examplas\desktop\screenshot.py)
所以想自己UI下界面,手动练习下

通过UI生成的: Screenshot.py

 # -*- coding: utf-8 -*-

 # Form implementation generated from reading ui file 'Screenshot.ui'
#
# Created: Mon Mar 30 11:41:46 2015
# by: PyQt4 UI code generator 4.10.3
#
# WARNING! All changes made in this file will be lost! from PyQt4 import QtCore, QtGui try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
def _fromUtf8(s):
return s try:
_encoding = QtGui.QApplication.UnicodeUTF8
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig) class Ui_ScrShot(object):
def setupUi(self, ScrShot):
ScrShot.setObjectName(_fromUtf8("ScrShot"))
ScrShot.resize(270, 270)
self.verticalLayout = QtGui.QVBoxLayout(ScrShot)
self.verticalLayout.setObjectName(_fromUtf8("verticalLayout"))
self.labelShow = QtGui.QLabel(ScrShot)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.labelShow.sizePolicy().hasHeightForWidth())
self.labelShow.setSizePolicy(sizePolicy)
self.labelShow.setText(_fromUtf8(""))
self.labelShow.setObjectName(_fromUtf8("labelShow"))
self.verticalLayout.addWidget(self.labelShow)
self.groupBox = QtGui.QGroupBox(ScrShot)
self.groupBox.setObjectName(_fromUtf8("groupBox"))
self.verticalLayout_2 = QtGui.QVBoxLayout(self.groupBox)
self.verticalLayout_2.setObjectName(_fromUtf8("verticalLayout_2"))
self.horizontalLayout_2 = QtGui.QHBoxLayout()
self.horizontalLayout_2.setObjectName(_fromUtf8("horizontalLayout_2"))
self.labelSpinBox = QtGui.QLabel(self.groupBox)
self.labelSpinBox.setObjectName(_fromUtf8("labelSpinBox"))
self.horizontalLayout_2.addWidget(self.labelSpinBox)
self.spinBox = QtGui.QSpinBox(self.groupBox)
self.spinBox.setObjectName(_fromUtf8("spinBox"))
self.horizontalLayout_2.addWidget(self.spinBox)
self.verticalLayout_2.addLayout(self.horizontalLayout_2)
self.checkBoxHideThis = QtGui.QCheckBox(self.groupBox)
self.checkBoxHideThis.setObjectName(_fromUtf8("checkBoxHideThis"))
self.verticalLayout_2.addWidget(self.checkBoxHideThis)
self.verticalLayout.addWidget(self.groupBox)
self.horizontalLayout = QtGui.QHBoxLayout()
self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout"))
spacerItem = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
self.horizontalLayout.addItem(spacerItem)
self.pushButtonNew = QtGui.QPushButton(ScrShot)
self.pushButtonNew.setObjectName(_fromUtf8("pushButtonNew"))
self.horizontalLayout.addWidget(self.pushButtonNew)
self.pushButtonSave = QtGui.QPushButton(ScrShot)
self.pushButtonSave.setObjectName(_fromUtf8("pushButtonSave"))
self.horizontalLayout.addWidget(self.pushButtonSave)
self.pushButton_Quit = QtGui.QPushButton(ScrShot)
self.pushButton_Quit.setObjectName(_fromUtf8("pushButton_Quit"))
self.horizontalLayout.addWidget(self.pushButton_Quit)
self.verticalLayout.addLayout(self.horizontalLayout) self.retranslateUi(ScrShot)
QtCore.QMetaObject.connectSlotsByName(ScrShot) def retranslateUi(self, ScrShot):
ScrShot.setWindowTitle(_translate("ScrShot", "Form", None))
self.groupBox.setTitle(_translate("ScrShot", "Options", None))
self.labelSpinBox.setText(_translate("ScrShot", "Screenstot Delay:", None))
self.checkBoxHideThis.setText(_translate("ScrShot", "Hide This Window", None))
self.pushButtonNew.setText(_translate("ScrShot", "新建", None))
self.pushButtonSave.setText(_translate("ScrShot", "保存", None))
self.pushButton_Quit.setText(_translate("ScrShot", "退出", None)) if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
ScrShot = QtGui.QWidget()
ui = Ui_ScrShot()
ui.setupUi(ScrShot)
ScrShot.show()
sys.exit(app.exec_())

 逻辑代码; MainScreenShot.py

 # -*- coding: utf-8 -*-
from PyQt4 import QtCore, QtGui
from Screenshot import Ui_ScrShot
import sys
import icoqrc
class MainFrom(QtGui.QWidget):
def __init__(self):
super(MainFrom, self).__init__()
self.Ui = Ui_ScrShot()
self.Ui.setupUi(self)
self.Ui.labelShow.setSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding) # size 策略为 可扩展 expanding
self.Ui.labelShow.setAlignment(QtCore.Qt.AlignCenter) #alignment 对齐方式 居中
self.Ui.labelShow.setMinimumSize(240, 160) # 最小为 240 X 160
self.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint) # 设置总是在最前
self.setWindowTitle(u'截图工具')
self.setWindowIcon(QtGui.QIcon(':qq.ico')) self.shootScreen()
self.Ui.spinBox.setSuffix(' s')
self.Ui.spinBox.setMaximum(60)
self.Ui.spinBox.setValue(5) self.Ui.pushButtonNew.clicked.connect(self.newScreenshot) # 从新开始新建截图
self.Ui.pushButtonSave.clicked.connect(self.saveScreenshot) # 保存截图
self.Ui.pushButton_Quit.clicked.connect(self.close) # 退出 # 截图
def shootScreen(self):
if self.Ui.spinBox.value() != 0:
QtGui.qApp.beep() #操作带上系统的响铃
self.originalPixmap = QtGui.QPixmap.grabWindow(QtGui.QApplication.desktop().winId()) # 获取 屏幕桌面截图
self.updateScreenshotLabel()
self.Ui.pushButtonNew.setDisabled(False)
if self.Ui.checkBoxHideThis.isChecked(): # 当选择隐藏按钮为True时, 截图完成显示窗体
self.show() # 获取图片显示在label上
def updateScreenshotLabel(self):
# self.originalPixmap.scaled() scaled()函数的声明const返回一个Qpixmap
# QtCore.Qt.KeepAspectRatio 尽可能大的在一个给定的矩形大小缩放到一个矩形且保持长宽比。
# QtCore.Qt.SmoothTransformation 平滑转换
self.Ui.labelShow.setPixmap(self.originalPixmap.scaled(self.Ui.labelShow.size(), QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation)) # 保存截图图片
def saveScreenshot(self):
format = 'png'
initialPath = QtCore.QDir.currentPath() + "/untitled." + format fileName = QtGui.QFileDialog.getSaveFileName(self, u"另存为",
initialPath,
"%s Files (*.%s)" % (format.upper(), format))
if fileName:
self.originalPixmap.save(fileName, format) # 新创建截图
def newScreenshot(self):
if self.Ui.checkBoxHideThis.isChecked():
self.hide()
self.Ui.pushButtonNew.setDisabled(True)
QtCore.QTimer.singleShot(self.Ui.spinBox.value() * 1000, self.shootScreen) # * 秒后触发截图 # 重载 resizeEvent 方法
def resizeEvent(self, event):
scaledSize = self.originalPixmap.size()
scaledSize.scale(self.Ui.labelShow.size(), QtCore.Qt.KeepAspectRatio)
if not self.Ui.labelShow.pixmap() or scaledSize != self.Ui.labelShow.pixmap().size(): # 当pixmap改变大小时候重新加载updateScreenshotLabel
self.updateScreenshotLabel() if __name__ == '__main__':
App = QtGui.QApplication(sys.argv)
MainApp = MainFrom()
MainApp.show()
sys.exit(App.exec_())

效果:

Pyqt 屏幕截图工具的更多相关文章

  1. C#软件开发实例.私人订制自己的屏幕截图工具(七)加入放大镜的功能

    上一篇:C#软件开发实例.私人订制自己的屏幕截图工具(六)加入配置管理功能 因为截图时可能须要精确截取某一部分,所以须要放大镜的功能,这样截取的时候才更easy定位截图的位置. 加入PictureBo ...

  2. C#软件开发实例.私人订制自己的屏幕截图工具(九)使用自己定义光标,QQ截图时的光标

    版权声明:本文为 testcs_dn(微wx笑) 原创文章,非商用自由转载-保持署名-注明出处,谢谢. https://blog.csdn.net/testcs_dn/article/details/ ...

  3. Java屏幕截图工具 捕获屏幕

    原文:http://www.open-open.com/code/view/1420037709781 import java.awt.BorderLayout; import java.awt.Co ...

  4. android sdk屏幕截图工具

    调用android sdk中的工具,在开发板上截图. 使用usb线连接android设备,打开adb调试. 进入目录 sdk/tools/ 运行 traceview.bat 运行 uiautomato ...

  5. C#软件开发实例.私人订制自己的屏幕截图工具(十)在截图中包括鼠标指针形状

    本实例所有文章文件夹 (一)功能概览 (二)创建项目.注冊热键.显示截图主窗体 (三)托盘图标及菜单的实现 (四)基本截图功能实现 (五)针对拖拽时闪烁卡顿现象的优化 (六)加入配置管理功能 (七)加 ...

  6. 【工具】小巧好用的屏幕截图工具——ScrToPic

    百度搜ScrToPic,有绿色版的用. 好处: 小巧快捷,不用为了截图而开QQ,不用看QQ的弹窗广告. 可以自定义截图区域和窗口捕捉,可以自定义这两个功能的快捷键. 截图时可以选择要不要显示鼠标. 窗 ...

  7. 【最强大的屏幕截图和标注工具】Snagit 2019.1 for Mac

    [简介] 今天和大家分享最新的 Snagit for Mac 2019.1 版本,这是Mac上最好用最强大的屏幕截图工具,Snagit功能非常强大,支持各种方式的屏幕截图,如全屏.滚动.部分.窗口.菜 ...

  8. 8款压箱底的Mac屏幕截图和录音录像工具软件,请你务必低调使用

    以下几款是是Mac上优秀的屏幕截图.录像和录音工具,有了这些工具,在Mac上进行截屏.录制视频或者录音都会事半功倍. 1. Snagit Mac上最好用最强大的屏幕截图工具,支持各种方式的屏幕截图以及 ...

  9. 如何使用office2010插入屏幕截图

    当我们习惯了用QQ的屏幕截图之后,当某一天我们在一台没有装QQ的办公电脑上,它装着office2010,我们可以实现用office来截图吗?其实Office2010深藏着犀利的截图工具. 插入图片到文 ...

随机推荐

  1. iis不支持下载apk的解决办法

    添加mime类型即可 扩展名:".apk", MIME类型:"application/vnd.android.package-archive"

  2. Python自动化之常用模块

    1 time和datetime模块 #_*_coding:utf-8_*_ __author__ = 'Alex Li' import time # print(time.clock()) #返回处理 ...

  3. putty快速设置本地代理

    sudo plink -D 127.0.0.1:8888 -l root -P 443 -pw xxx 104.xxx.xxx.xxx

  4. 4. 如何解释dalvik字节码

    如何解释dalvik字节码 文档: 在Android系统源码目录dalvik\docs有相关指令文档 dalvik-bytecode.html 实战: 来直接实战模拟来理解枯燥的理论 用IDA打开一个 ...

  5. 用ConfigParser模块读写配置文件——Python

    对于功能较多.考虑用户体验的程序,配置功能是必不可少的,如何存储程序的各种配置? 1)可以用全局变量,不过全局变量具有易失性,程序崩溃或者关闭之后配置就没了,再者配置太多,将变量分配到哪里也是需要考虑 ...

  6. ubuntu下ssh使用proxy:corkscrew

    1,安装corkscrew: sudo apt-get install corkscrew 2, 配置 vim ~/.ssh/config 写入如下: Host 10.1.*.* ProxyComma ...

  7. Maven学习总结

    转载至:http://www.cnblogs.com/xdp-gacl/p/3498271.html 一 入门 一.Maven的基本概念 Maven(翻译为"专家","内 ...

  8. FreeRTOS--删除任务

    FreeRTOS学习笔记——任务删除 vTaskDelete() API - liyan728的专栏 - 博客频道 - CSDN.NET http://blog.csdn.net/liyan728/a ...

  9. Mingw32 for ffmpeg

    2016.02.27之后, ffmpeg 官方不在支持 XP 系统,需要下载源码自己编译. 整了好几天搭建了 MinGW32 for XP 安装了 ffmpeg 所需的几乎所有的库文件. 除了 lib ...

  10. ORACLE、MYSQL的JDBC配置

    info.jdbc.driverClassName=oracle.jdbc.driver.OracleDriver info.jdbc.url=jdbc:oracle:thin:@192.168.18 ...