从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. JDBC MySQL

    JDBC连接MySQL 加载及注册JDBC驱动程序 Class.forName("com.mysql.jdbc.Driver"); Class.forName("com. ...

  2. idea修改默认快捷键

    点击file ,选择settings. 输入keymap: 因为多数人使用的都是eclipse,比较容易上手,习惯了eclipse的键位,如 此就能更换. 也可以在对应的操作上,设置自己熟悉的键位.

  3. sublime text 个性设置

    http://stackoverflow.com/questions/13781833/sublime-text-2-how-to-change-the-font-size-of-the-file-s ...

  4. ndk学习7: 使用静态库

    目录: 手工编译静态库 ndk-build编译静态库   手工编译静态库 老规矩还是先手工操作,知其然并知其所以然   需要用到的核心命令: gcc –g –c mod1.c mod2.c mod3. ...

  5. Python分割list

    对于一个很大的列表,例如有超过一万个元素的列表,假如需要对列表中的每一个元素都进行一个复杂且耗时的计算,用单线程处理起来会很慢,这时有必要利用多线程进行处理,处理之前首先需要对大的列表进行分割,分割成 ...

  6. mybatis Result Maps collection already contains value for com.ebways.dictionary.dao.impl.PtInfoDaoImpl.beanMap

    java.lang.IllegalStateException: Failed to load ApplicationContext at org.springframework.test.conte ...

  7. java.lang.UnsatisfiedLinkError: Couldn't load hyphenate_av from loader dalvik.system.PathClassLoader

    android studio引入第三方库时报如下异常. 06-15 16:50:24.477 9497-9497/easemobim.test.com.easemobim E/AndroidRunti ...

  8. unity3D技术之事件函数的执行顺序[转]

    unity3D技术之事件函数的执行顺序 转自http://www.yxkfw.com/?p=13703   在unity的脚本,有大量的脚本执行按照预先确定的顺序执行的事件函数.此执行顺序说明如下: ...

  9. MySQL 5.6 Threadpool(优先队列)介绍及性能测试【转】

    本文来自:http://www.gpfeng.com/?p=540&utm_source=tuicool&utm_medium=referral 背景介绍 MySQL常用(目前线上使用 ...

  10. Effective C++ -----条款32:确定你的public继承塑模出is-a关系

    “public继承”意味is-a.适用于base classes身上的每一件事情一定也适用于derived classes身上,因为每一个derive class对象也都是一个base class对象 ...