python实现windows窗体截图的三种方式

分别win32ui,pyqt5,PIL
1、windowsapi

import win32con, win32ui, win32gui
    # 获取窗口句柄
handle = win32gui.FindWindow(None,windowsname)
    # 获取窗口DC
hdDC = win32gui.GetWindowDC(handle)
    # 根据句柄创建一个DC
newhdDC = win32ui.CreateDCFromHandle(hdDC)
    # 创建一个兼容设备内存的DC
saveDC = newhdDC.CreateCompatibleDC()
    # 创建bitmap保存图片
saveBitmap = win32ui.CreateBitmap()
    #win32gui.SendMessage(handle, win32con.WM_SYSCOMMAND, win32con.SC_RESTORE, 0)
    # 获取窗口的位置信息
left, top, right, bottom = win32gui.GetWindowRect(handle)
    # 窗口长宽
width = right - left
height = bottom - top
    # bitmap初始化
saveBitmap.CreateCompatibleBitmap(newhdDC, width, height)
saveDC.SelectObject(saveBitmap)
saveDC.BitBlt((0, 0), (width, height), newhdDC, (0, 0), win32con.SRCCOPY)
saveBitmap.SaveBitmapFile(saveDC, filename)

2、pyqt5

import win32con, win32ui, win32gui
from PyQt5.QtWidgets import QApplication
from PyQt5.QtGui import *
handle = win32gui.FindWindow(None,windowsname)
app = QApplication(sys.argv)
    screen = QApplication.primaryScreen()
    img = screen.grabWindow(handle).toImage()
    img.save("screenshot.jpg")

3、PIL

from PIL import ImageGrab
import win32con, win32ui, win32gui
    # 获取窗口句柄
handle = win32gui.FindWindow(None,windowsname)
left, top, right, bottom = win32gui.GetWindowRect(handle)
img_ready = ImageGrab.grab((left, top, right, bottom))
img_ready.save(os.getcwd() + '/pil.png')
  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Python 3.x和PyQt5中,我们可以使用QMainWindow类以及QSplitter实现窗体中的动态子窗体载入。 首先,我们需要引入PyQt5的相关模块: ```python from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QSplitter ``` 接下来,需要定义一个功能类MainWindow,继承自QMainWindow,并在初始化方法中设置主窗体的布局和属性方法。 ```python class MainWindow(QMainWindow): def __init__(self): super().__init__() self.initUI() def initUI(self): splitter = QSplitter(self) self.setCentralWidget(splitter) self.setWindowTitle("Dynamic Sub Windows") self.setGeometry(100, 100, 800, 600) ``` 在initUI方法中,我们创建了一个QSplitter对象,并将其设置为主窗体的中央部件(setCentralWidget)。然后,我们设置了主窗体的标题(setWindowTitle)以及位置和大小(setGeometry)。 接下来,我们需要实现一个子窗体类SubWindow,继承自QWidget,并在其中定义子窗体的布局和属性方法。 ```python class SubWindow(QWidget): def __init__(self, parent=None): super().__init__(parent) self.initUI() def initUI(self): self.setWindowTitle("Sub Window") ``` 在initUI方法中,我们设置了子窗体的标题。 最后,我们在主函数中创建QApplication对象,以及MainWindow和SubWindow对象,并将SubWindow对象添加到QSplitter对象中。 ```python if __name__ == "__main__": app = QApplication([]) mainWindow = MainWindow() subWindow = SubWindow() mainWindow.centralWidget().addWidget(subWindow) mainWindow.show() app.exec_() ``` 在主函数中,我们首先创建了一个QApplication对象,然后创建了MainWindow对象。接着,我们创建了SubWindow对象,并将其添加到QSplitter对象中。最后,通过show方法显示主窗体,然后调用app.exec_()方法启动应用程序的事件循环。 通过以上步骤,我们就可以实现一个主窗体中动态载入子窗体的应用程序。在运行程序后,我们可以在主窗体中看到一个可以分割的窗体,并在其中展示了一个子窗体,并且可以根据需要调整子窗体的大小。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值