QT把widget转换成图片后打印

简介:     from PyQt5.QtWidgets import (QApplication, QWidget, QTableWidget,QPushButton, QVBoxLayout, QTableWidgetItem) from PyQt5.

 

 

 

from PyQt5.QtWidgets import (QApplication, QWidget, QTableWidget,QPushButton, 
                             QVBoxLayout, 
                            QTableWidgetItem)
from PyQt5.QtGui import  QPixmap, QPainter, QImage, QTextDocument
from PyQt5.QtPrintSupport import  QPrinter, QPrintDialog, QPrintPreviewDialog
from PyQt5.QtCore import QRect, QPoint, QSize ,  Qt



   


def on_picButton_clicked():

    printer =QPrinter(QPrinter.HighResolution)
#/* 打印预览 */
    preview =QPrintPreviewDialog(printer,widget )   

    """
     * QPrintPreviewDialog类提供了一个打印预览对话框,里面功能比较全,
     * paintRequested(QPrinter *printer)是系统提供的,
     * 当preview.exec()执行时该信号被触发,
     * plotPic(QPrinter *printer)是用户自定义的槽函数,图像的绘制就在这个函数里。
    """
    preview.paintRequested.connect(plotPic)

    preview.exec(); #/* 等待预览界面退出 */



def  plotPic(printer):

   
   
    painter =QPainter(printer);
    image = QPixmap()

    image=widget.grab(QRect( QPoint( 0, 0 ), 
                                            QSize( widget.size().width(), 
                                                        widget.size().height()
                                                    ) 
                                        )
                                )# /* 绘制窗口至画布 */
   #QRect 
    rect = painter.viewport();
   #QSize 
    size = image.size();
    size.scale(rect.size(), Qt.KeepAspectRatio)#     //此处保证图片显示完整
    painter.setViewport(rect.x(), rect.y(),size.width(), size.height());
    painter.setWindow(image.rect());

    painter.drawPixmap(0,0,image); #/* 数据显示至预览界面 */



import sys

app = QApplication(sys.argv)
tablewidget = QTableWidget()
## 设置列数
tablewidget.setColumnCount(4)
tablewidget.horizontalHeader().setDefaultSectionSize(150)

## QStringList在PyQt5
header= ["name", "last modify time","type",  "size"]

tablewidget.setHorizontalHeaderLabels(header)
tablewidget.insertRow(0)
tablewidget.insertRow(0)

pItem1 =  QTableWidgetItem("aa" )
pItem2 =  QTableWidgetItem("bb" )
pItem3 =  QTableWidgetItem("cc" )
pItem4 =  QTableWidgetItem("dd" )
tablewidget.setItem( 0, 0, pItem1 )
tablewidget.setItem( 0, 1, pItem2 )
tablewidget.setItem( 0, 2, pItem3 )
tablewidget.setItem( 0, 3, pItem4 )

tablewidget.setMinimumSize(800, 600)



button = QPushButton('打印界面')
button.clicked.connect(on_picButton_clicked)



widget = QWidget()
layout = QVBoxLayout(widget)
layout.addWidget(button)
layout.addWidget(button_txt)
layout.addWidget(tablewidget)
widget.show()

sys.exit(app.exec_())

 

相关文章
|
4月前
|
计算机视觉 C++
基于Qt的简易图片浏览器设计与实现
基于Qt的简易图片浏览器设计与实现
226 1
|
4月前
|
存储 容器
QT中QListWidget实现QListWidgetItem图片和文字居中
在使用QT开发软件的过程中,很多时候使用QListWidget来实现列表项的功能,比如MS系统的功能模块菜单,如下面2张图所示,其中第一张图是带文字和图标的列表项,第二张图是纯图标的模式,在最近开发的平台客户端的某个功能模块都用上了。
758 0
|
2月前
|
数据安全/隐私保护 C++ 计算机视觉
Qt(C++)开发一款图片防盗用水印制作小工具
文本水印是一种常用的防盗用手段,可以将文本信息嵌入到图片、视频等文件中,用于识别和证明文件的版权归属。在数字化和网络化的时代,大量的原创作品容易被不法分子盗用或侵犯版权,因此加入文本水印成为了保护原创作品和维护知识产权的必要手段。 通常情况下,文本水印可以包含版权声明、制作者姓名、日期、网址等信息,以帮助识别文件的来源和版权归属。同时,为了增强防盗用效果,文本水印通常会采用字体、颜色、角度等多种组合方式,使得水印难以被删除或篡改,有效地降低了盗用意愿和风险。 开发人员可以使用图像处理技术和编程语言实现文本水印的功能,例如使用Qt的QPainter类进行文本绘制操作,将文本信息嵌入到图片中,
144 1
Qt(C++)开发一款图片防盗用水印制作小工具
|
1月前
|
计算机视觉
使用QT显示OpenCV读取的图片
使用QT显示OpenCV读取的图片
34 1
|
1月前
|
存储
【Qt 学习笔记】Qt常用控件 | 多元素控件 | Table Widget的说明及介绍
【Qt 学习笔记】Qt常用控件 | 多元素控件 | Table Widget的说明及介绍
59 3
|
1月前
|
索引
【Qt 学习笔记】Qt常用控件 | 多元素控件 | List Widget的说明及介绍
【Qt 学习笔记】Qt常用控件 | 多元素控件 | List Widget的说明及介绍
177 3
|
1月前
|
容器
【Qt 学习笔记】Qt常用控件 | 容器类控件 | Tab Widget的使用及说明
【Qt 学习笔记】Qt常用控件 | 容器类控件 | Tab Widget的使用及说明
23 2
|
1月前
|
数据可视化 API
【Qt 学习笔记】Qt常用控件 | 多元素控件 | Tree Widget的说明及介绍
【Qt 学习笔记】Qt常用控件 | 多元素控件 | Tree Widget的说明及介绍
17 2
|
2月前
QT设置widget背景图片
该内容介绍如何在Qt中为控件添加背景图片。主要方法包括:1) 在样式表中使用`border-image`属性指定控件及其背景图片;2) 使用调色板`QPalette`设置图片,但可能导致窗口显示不下;3) 在`paintEvent`中绘制图片,适合自定义绘图但不适用于子窗口;4) 通过覆盖一个大小与窗口相同的`QLabel`来设置背景图片,可实现动态背景。推荐使用样式表设置背景,简单高效且适合子窗口。
182 3
|
1月前
【Qt 学习笔记】Qt常用控件 | 显示类控件 | Calendar Widget的使用及说明
【Qt 学习笔记】Qt常用控件 | 显示类控件 | Calendar Widget的使用及说明
89 0