printdocument python_python学习笔记之wxpython打印预览

主要学习wxPython in action 和Demo程序,做点学习笔记

wxPython 通过使用设备上下文和绘制操作来实现打印,wxPython中实现打印的一个重要的类:wx.PrintOut它管理实际的图片部分。打印输出实例可以由一个代表打印机的wx.Printer对象或用于打印预览的wx.PrintPreview对象来管理。下面我介绍一下打印预览。

一,创建wx.PrintOut的子类,覆盖wx.PrintOut的方法以定义自己的打印行为。wx.PrintOut有多个个可以覆盖以自定义打印行为的方法,这些方法会被自动触发,然后通常不需要覆盖所有的方法。下面分析一下wxPython Demo中的类子来说明各个方法。

[python]

class MyPrintout(wx.Printout):

def __init__(self, canvas, log):

wx.Printout.__init__(self)

self.canvas = canvas

self.log = log

def OnBeginDocument(self, start, end):#其中参数start、end告诉wxPython打印的起始页和最后一页。

self.log.WriteText("MyPrintout.OnBeginDocument\n")#做你自己想做的操作

return super(MyPrintout, self).OnBeginDocument(start, end)#必须调用父类的方法,因为父类的方法要做一些重要的工作

def OnEndDocument(self):#文档副本打印结束后,被触发。

self.log.WriteText("MyPrintout.OnEndDocument\n")

super(MyPrintout, self).OnEndDocument()#同样必须调用父类的方法

def OnBeginPrinting(self):#一般情况不需要重载该方法

self.log.WriteText("MyPrintout.OnBeginPrinting\n")

super(MyPrintout, self).OnBeginPrinting()

def OnEndPrinting(self):#当副本打印完成后,该方法被调用,以结束打印

self.log.WriteText("MyPrintout.OnEndPrinting\n")

super(MyPrintout, self).OnEndPrinting()

def OnPreparePrinting(self):#通常用于打印之前的一些计算,如计算有多少页

self.log.WriteText("MyPrintout.OnPreparePrinting\n")

super(MyPrintout, self).OnPreparePrinting()

def HasPage(self, page):#该方法通常需要覆盖,它被打印框架用于循环控制,如果参数page存在文档的范围内,返回True,否则返回False

self.log.WriteText("MyPrintout.HasPage: %d\n" % page)

if page <= 2:

return True

else:

return False

def GetPageInfo(self):#获得文档的页数信息

self.log.WriteText("MyPrintout.GetPageInfo\n")

return (1, 2, 1, 2)

def OnPrintPage(self, page):#实际的打印操作

self.log.WriteText("MyPrintout.OnPrintPage: %d\n" % page)

dc = self.GetDC()

...

return True

二、实现打印预览

第一步:创建预览实例

wx.PrintPreview(printout,printoutForPrinting,data=None)

参数:printout是wx.PrintOut对象,用于管理预览;

pintoutForPrinting也是wx.PrintOut对象,如果不为None,那么现实打印预览的时候窗口包含一个Print按钮,该按钮启动打印,该参数用于实际的打印。

data是一个wx.PrintData对象或wx.PrintDialogData对象。如果参数指定,那么他被用于控制该打印预览。

第二步:创建预览框架

有了wx.PrintPreview,就需要一个框架显示wx.PrintPreview.

wx.PreviewFrame(preView,parent,title,pos=wx.DefaultPosition,size=wx.DefaultSize,style=wx.DEFAULT_FRAME_STYLE,name='frame')

preView就是要预览的实例

第三步:初始化框架

在你显示你的wx.PreviewFrame之前,你需要调用Initialize()方法,该方法创建窗口的内部的部件并做其它的内部的计算。

下面实现一个简单的打印位图的功能,在前面视频截获的基础上:

[python]

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

import wx

import wx.xrc

import VideoCapture

###########################################################################

## Class MyFrame1

###########################################################################

class MyFrame1 ( wx.Frame ):

def __init__( self, parent ):

wx.Frame.__init__ ( self, parent, id = wx.ID_ANY, title = wx.EmptyString, pos = wx.DefaultPosition, size = wx.Size( 566,535 ), style = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL )

self.SetSizeHintsSz( wx.DefaultSize, wx.DefaultSize )

bSizer1 = wx.BoxSizer( wx.VERTICAL )

self.m_panel1 = wx.Panel( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL )

bSizer1.Add( self.m_panel1, 1, wx.EXPAND |wx.ALL, 5 )

self.m_button3 = wx.Button( self, wx.ID_ANY, u"视频捕获", wx.DefaultPosition, wx.DefaultSize, 0 )

self.m_button4 = wx.Button( self, wx.ID_ANY, u"打印预览", wx.DefaultPosition, wx.DefaultSize, 0 )

bSizer1.Add( self.m_button3, 0, wx.ALL, 5 )

bSizer1.Add( self.m_button4, 0, wx.ALL, 5 )

self.SetSizer( bSizer1 )

self.Layout()

self.Centre( wx.BOTH )

# Connect Events

self.m_button3.Bind( wx.EVT_BUTTON, self.OnButton )

self.m_button4.Bind( wx.EVT_BUTTON, self.OnButton2 )

self.timer=wx.Timer(self)

self.Bind(wx.EVT_TIMER,self.OnIdel,self.timer)

self.Bind(wx.EVT_CLOSE,self.OnExit)

def OnExit(self,evnet):

self.timer.Stop()

wx.Exit()

pass

def OnIdel(self,evnet):

cam = VideoCapture.Device()

self.cam.saveSnapshot('test.jpg')

img=wx.Image("test.jpg",wx.BITMAP_TYPE_ANY).ConvertToBitmap()

dc=wx.ClientDC(self.m_panel1)

dc.DrawBitmap(img,0,0,False)

def OnButton( self, event ):

self.cam = VideoCapture.Device()

#cam.saveSnapshot('test.jpg')

self.timer.Start(100)

def OnButton2( self, event ):

self.timer.Stop()

self.printData = wx.PrintData()

self.printData.SetPaperId(wx.PAPER_LETTER)

self.printData.SetPrintMode(wx.PRINT_MODE_PRINTER)

data = wx.PrintDialogData(self.printData)

printout = MyPrintout(self)

printout2 = MyPrintout(self)

self.preview = wx.PrintPreview(printout, printout2, data)#第一步创建预览设备

if not self.preview.Ok():

wx.MessageBox("error")

return

pfrm = wx.PreviewFrame(self.preview, self, "This is a print preview")#第二步创建框架

pfrm.Initialize()#第三步初始化框架  http://www.2cto.com/

pfrm.SetPosition(self.GetPosition())#设置默认的位置

pfrm.SetSize(self.GetSize())#设置打印预览框的大小

pfrm.Show(True)

class MyPrintout(wx.Printout):

def __init__(self, canvas):

wx.Printout.__init__(self)

self.canvas = canvas

def OnBeginDocument(self, start, end):

return super(MyPrintout, self).OnBeginDocument(start, end)

def OnEndDocument(self):

super(MyPrintout, self).OnEndDocument()

def OnBeginPrinting(self):

super(MyPrintout, self).OnBeginPrinting()

def OnEndPrinting(self):

super(MyPrintout, self).OnEndPrinting()

def OnPreparePrinting(self):

super(MyPrintout, self).OnPreparePrinting()

def OnPrintPage(self, page):

dc = self.GetDC()

#-------------------------------------------

# One possible method of setting scaling factors...

img=wx.Image("test.jpg",wx.BITMAP_TYPE_ANY).ConvertToBitmap()

dc.DrawBitmap(img,0,0,False)

return True

if __name__=='__main__':

app=wx.App()

frame=MyFrame1(None)

frame.Show(True)

app.MainLoop()

效果如图:

作者:kkxgx

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/562382.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Java SSM springboot健身管理系统设计和实现

&#x1f345; 作者主页&#xff1a;Java李杨勇 &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、【java李杨勇】公号作者✌ 简历模板、学习资料、面试题库【关注我&#xff0c;都给你】 &#x1f345;文末获取源码联系&#x1f345; 临近学期结束&#xff…

输入法画面_仙剑奇侠传X百度输入法联名纪念版皮肤今日上线

听说我们的键盘里藏着属于你的独家记忆值#仙剑25周年#之际百度输入法联名《仙剑奇侠传》 特别推出官方纪念版皮肤【仙剑廿五相守】让浓情回忆在指尖跳动当李逍遥、赵灵儿、林月如、阿奴齐聚你的键盘那些恍如昨日的画面是否又在你的心头浮现全新的Q版形象在保留人物原有特征的基…

基于java ssm springboot宠物用品商城系统

&#x1f345; 作者主页&#xff1a;Java李杨勇 &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、【java李杨勇】公号作者✌ 简历模板、学习资料、面试题库【关注我&#xff0c;都给你】 &#x1f345;文末获取源码联系&#x1f345; 临近学期结束&#xff…

椭圆极点极线性质_又见阿氏圆——适合作椭圆大题的小题

如下图&#xff1a;过椭圆内一点作的直线交椭圆于&#xff0c;两点&#xff0e;是椭圆上相异的两点&#xff0c;满足分别平分,&#xff0c;求外接圆半径的最小值.解&#xff1a;作的外角角平分线与的延长线交于&#xff0c;的外角平分线与的延长线交于&#xff0c;根据内外角平…

基于javaweb jsp+servlet学生宿舍管理系统

&#x1f345; 作者主页&#xff1a;Java李杨勇 &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、【java李杨勇】公号作者✌ 简历模板、学习资料、面试题库【关注我&#xff0c;都给你】 &#x1f345;文末获取源码联系&#x1f345; 临近学期结束&#xff…

先天性脑部发育异常_儿童脑发育不良的3大“诱因”,若孩子出现这5种异常,要警惕...

儿童脑发育不良主要是指脑组织减少&#xff0c;脑神经发育不健全&#xff0c;如果不及时治疗&#xff0c;会给患儿的正常生活带来严重影响。所以出现脑发育不良的症状时必须要及时找出病因&#xff0c;接受规范化的治疗&#xff0c;与此同时还应该注重对患儿的护理&#xff0c;…

FB混合C语言编译

这是群友分享的方法&#xff0c;这里只是作为记录和分享。 有了这个功能&#xff0c;可以很方便的拷贝一下C或者C代码直接用到FB上。 既然是混合C语言编译&#xff0c;当然得有C的代码。比如随便去网上找两个排序&#xff1a;冒泡排序和选择排序&#xff0c;代码如下&#xf…

基于Java SSM springboot+VUE+redis实现的前后端分类版网上商城项目

&#x1f345; 作者主页&#xff1a;Java李杨勇 &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、【java李杨勇】公号作者✌ 简历模板、学习资料、面试题库【关注我&#xff0c;都给你】 &#x1f345;文末获取源码联系&#x1f345; 临近学期结束&#xff…

@value 注入静态属性_TP6依赖注入是如何实现的

TP6依赖注入是如何实现的先看下app/provider容器文件&#xff0c;此文件会在thinkAPP实例化的时候直接从新绑定类到的容器上。复制原有容器中的类可以先看下thinkAPP 构造方法中的处理逻辑/** * 架构方法 * access public * param string $rootPath 应用根目录 */ public f…

信捷触摸屏c语言脚本_信捷触摸屏TG系列产品型号说明及功能介绍

产品介绍全新外观设计&#xff0c;比普通款更薄1677万色&#xff0c;画质细腻无痕&#xff0c;显示效果媲美液晶显示器下载、启动、运行&#xff0c;三位一体的超高速响应支持C语言脚本功能&#xff0c;运算、自由协议编写、绘图&#xff0c;提高编程自由度支持BMP、JPEG格式图…

mysql搜索引擎_常见的 mysql 搜索引擎

简单来说&#xff0c;存储引擎就是指表的类型以及表在计算机上的存储方式。存储引擎的概念是MySQL的特点&#xff0c;Oracle中没有专门的存储引擎的概念&#xff0c;Oracle有OLTP和OLAP模式的区分。不同的存储引擎决定了MySQL数据库中的表可以用不同的方式来存储。我们可以根据…

基于java SSM springboot+redis网上水果超市商城设计和实现以及文档

作者主页&#xff1a;Java李杨勇 简介&#xff1a;Java领域优质创作者、【Java李杨勇】公号作者 简历模板、学习资料、面试题库、技术互助【关注我&#xff0c;都给你】 文末获取源码 主要技术实现&#xff1a;spring、 springmvc、 redis、 springboot、 mybatis 、sessio…

mysql 组合索引 or_mysql索引优化实例(单列索引与组合索引)

索引一般用于在数据规模大时对查询进行优化的一种机制&#xff0c;对于一般的查询来说&#xff0c;mysql会去遍历整个表&#xff0c;来查询符合要求的结果&#xff1b;如果借助于mysql索引&#xff0c;mysql会将要索引的字段按照一定的算法进行处理&#xff0c;并生成一个类似于…

基于java SSM springboot景区行李寄存管理系统设计和实现

&#x1f345; 作者主页&#xff1a;Java李杨勇 &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java李杨勇公号作者✌ 简历模板、学习资料、面试题库、技术互助【关注我&#xff0c;都给你】 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f…

Spring、SpringMVC和SpringBoot之间的关系

1、Spring Spring是一个开源容器框架&#xff0c;它接管了Web层、业务层、DAO层、持久性层的组件&#xff0c;并可以配置各种bean并维护bean到bean的关系。 其核心是控制反转(IOC)和面向方面(AOP)&#xff0c;这只是一个分层的轻量级开源框架。 2、SpringMVC Spring MVC属于Spr…

mysql 5.7.13 mac_Mac 安装mysql 5.7.13版本 登录及改密码

小白用户&#xff0c;首次安装5.7.13&#xff0c;刚开始有些蒙&#xff0c;改密码就就是个坑&#xff0c;好在还是解决了&#xff0c;记录一下心路历程&#xff1a;安装的过程很简单&#xff0c;就直接到官方下mysql dmg&#xff0c;一路下一步就可以装完..Ps:安装完毕之前会有…

java springboot经典面试题分享

1. SpringBoot 简介 SpringBoot 是简化 Spring 应用开发的一个框架。他整合了 Spring 的技术栈&#xff0c;提供各种标准化的默认配置。使得我们可以快速开发 Spring 项目&#xff0c;免掉 xml 配置的麻烦。降低 Spring 项目的成本。 2. SpringBoot 的优缺点 使编码配置部署都变…

mysql创建临时表 分页_Mysql 如何创建一张临时表

mysql 利用 temporary 关键字就可以创建出一个临时表。创建的这张表会在与服务器的会话终止时自动消失语法&#xff1a;create temporary table tbl_name...;规则&#xff1a;每个会话只能看到自己创建的临时表&#xff0c;不同的会话可以创建相同表名称的临时表。临时表的表名…

SpringCloud面试题分享

1、什么是Spring Cloud&#xff1f; Spring cloud 流应用程序启动器是基于 Spring Boot 的 Spring 集成应用程序&#xff0c;提供与外部系统的集成&#xff0c;更专注于服务治理。Spring cloud Task&#xff0c;一个生命周期短暂的微服务框架&#xff0c;用于快速构建执行有限数…

基于java SSM springboot动物检疫信息管理系统设计和实现

作者主页&#xff1a;Java李杨勇 简介&#xff1a;Java领域优质创作者、【Java李杨勇】公号作者 简历模板、学习资料、面试题库、技术互助【关注我&#xff0c;都给你】 文末获取源码 主要技术实现&#xff1a;spring、 springmvc、 springboot、 springboot security权限控…