python 报表打印预览_python学习笔记之wxpython打印预览
主要学习wxPython in action 和Demo程序,做点学习笔记
wxPython 通过使用设备上下文和绘制操作来实现打印,wxPython中实现打印的一个重要的类:wx.PrintOut它管理实际的图片部分。打印输出实例可以由一个代表打印机的wx.Printer对象或用于打印预览的wx.PrintPreview对象来管理。下面我介绍一下打印预览。
一,创建wx.PrintOut的子类,覆盖wx.PrintOut的方法以定义自己的打印行为。wx.PrintOut有多个个可以覆盖以自定义打印行为的方法,这些方法会被自动触发,然后通常不需要覆盖所有的方法。下面分析一下wxPython Demo中的类子来说明各个方法。
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()方法,该方法创建窗口的内部的部件并做其它的内部的计算。
下面实现一个简单的打印位图的功能,在前面视频截获的基础上:
# -*- 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()#第三步初始化框架
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()效果如图:
python 报表打印预览_python学习笔记之wxpython打印预览相关推荐
- printdocument python_python学习笔记之wxpython打印预览
主要学习wxPython in action 和Demo程序,做点学习笔记 wxPython 通过使用设备上下文和绘制操作来实现打印,wxPython中实现打印的一个重要的类:wx.PrintOut它 ...
- python编程16章教程_Python学习笔记__16.2章 TCP编程
# 这是学习廖雪峰老师python教程的学习笔记 Socket是网络编程的一个抽象概念.通常我们用一个Socket表示"打开了一个网络链接",而打开一个Socket需要知道目标计算 ...
- python里while的用法_Python学习笔记之While循环用法分析
本文实例讲述了Python学习笔记之While循环用法.分享给大家供大家参考,具体如下: 前面一篇<Python学习笔记之For循环用法>详细介绍了Python for循环,这里再来讲述一 ...
- python中if语句使用_Python学习笔记之if语句的使用示例
前言 条件语句在实际开发中我们已经使用过几次了,在这里我们需要再次隆重的来介绍一下它,下面话不多说了,来一起看看详细的介绍吧. if语句 顾名思义,该语句为判断语句,先来一个简单的示例 cars=[' ...
- python中while的用法_Python学习笔记之While循环用法分析
本文实例讲述了Python学习笔记之While循环用法.分享给大家供大家参考,具体如下: 前面一篇<Python学习笔记之For循环用法>详细介绍了Python for循环,这里再来讲述一 ...
- python数值类型的操作_Python学习笔记,数值类型及操作
数值类型及操作 int类型数值大小不限: 整数的进制 1,整数类型正常为10进制 2,开头加0b or 0B 为二进制 3,加0o or 0O 为8进制 4,加0x 为16进制 浮点运算中存在不确定尾 ...
- python编写程序输出诗句_Python学习笔记(一)-- print语句
print语句可以向屏幕上输出指定的文字.比如输出'hello, world',用代码实现如下: >>> print 'hello, world' 注意: 1.当我们在Python交 ...
- python打印目录结构_Python学习笔记(2)——遍历目录结构并打印
有时候想看一下项目中的目录和文件结构,用python实现 主要用到这几个函数 import os os.getcwd() #获取当前运行程序的目录 os.listdir(path) #取得path下 ...
- python的解释提示符为_python学习笔记01--基础
一.解释型语言 python是一门解释型语言,这意味着: l编写过后的代码不用编译连接即可运行,节约调试时间 lpython的解释器在大多数系统中都有很好实现,所以编写的代码可以运行在任何系统中 但同 ...
- python控制流代码怎么用_Python学习笔记控制流的元素
随笔记录方便自己和同路人查阅. #------------------------------------------------我是可耻的分割线--------------------------- ...
最新文章
- Yann Lecun最新演讲:机器怎样进行有效学习?
- SQL-Oracle游标
- SAP Marketing Cloud功能简述(四) : 线索和客户管理
- token的作用_说一说Coin和Token有什么不同
- SpringBoot 下 Mybatis 的缓存
- allwinner h6 armv8 SylixOS 启动分析
- 软件工程之软件概要设计
- 2013年全国天线年会参展商名录及观展指南
- USB转串口那些事儿—串口驱动类型
- 最大流最小割经典例题_hiho 第116周,最大流最小割定理,求最小割集S,T
- 用Prolog解决数独
- 计算机中if函数的使用方法,如何在Excel 中使用IF函数
- 多糖类水凝胶构建制备介绍(瑞禧多糖水凝胶简述)
- JETT(二)-Java简单实现
- 如何创建一个javaWeb项目
- adf被打开_HP Laserjet M1522nf 出现ADF门打开 是什么意思
- Homekit智能家居DIY一WIFI智能插座
- ubuntu安装水星MW150US无线网卡8188eu驱动
- java中for break的用法_java break语句的使用方法
- 【Python】PermissionError: [Errno 13] Permission denied: ‘xxx.xlsx‘问题解决