主要学习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打印预览相关推荐

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

    主要学习wxPython in action 和Demo程序,做点学习笔记 wxPython 通过使用设备上下文和绘制操作来实现打印,wxPython中实现打印的一个重要的类:wx.PrintOut它 ...

  2. python编程16章教程_Python学习笔记__16.2章 TCP编程

    # 这是学习廖雪峰老师python教程的学习笔记 Socket是网络编程的一个抽象概念.通常我们用一个Socket表示"打开了一个网络链接",而打开一个Socket需要知道目标计算 ...

  3. python里while的用法_Python学习笔记之While循环用法分析

    本文实例讲述了Python学习笔记之While循环用法.分享给大家供大家参考,具体如下: 前面一篇<Python学习笔记之For循环用法>详细介绍了Python for循环,这里再来讲述一 ...

  4. python中if语句使用_Python学习笔记之if语句的使用示例

    前言 条件语句在实际开发中我们已经使用过几次了,在这里我们需要再次隆重的来介绍一下它,下面话不多说了,来一起看看详细的介绍吧. if语句 顾名思义,该语句为判断语句,先来一个简单的示例 cars=[' ...

  5. python中while的用法_Python学习笔记之While循环用法分析

    本文实例讲述了Python学习笔记之While循环用法.分享给大家供大家参考,具体如下: 前面一篇<Python学习笔记之For循环用法>详细介绍了Python for循环,这里再来讲述一 ...

  6. python数值类型的操作_Python学习笔记,数值类型及操作

    数值类型及操作 int类型数值大小不限: 整数的进制 1,整数类型正常为10进制 2,开头加0b or 0B 为二进制 3,加0o or 0O 为8进制 4,加0x 为16进制 浮点运算中存在不确定尾 ...

  7. python编写程序输出诗句_Python学习笔记(一)-- print语句

    print语句可以向屏幕上输出指定的文字.比如输出'hello, world',用代码实现如下: >>> print 'hello, world' 注意: 1.当我们在Python交 ...

  8. python打印目录结构_Python学习笔记(2)——遍历目录结构并打印

    有时候想看一下项目中的目录和文件结构,用python实现 主要用到这几个函数 import os os.getcwd()  #获取当前运行程序的目录 os.listdir(path) #取得path下 ...

  9. python的解释提示符为_python学习笔记01--基础

    一.解释型语言 python是一门解释型语言,这意味着: l编写过后的代码不用编译连接即可运行,节约调试时间 lpython的解释器在大多数系统中都有很好实现,所以编写的代码可以运行在任何系统中 但同 ...

  10. python控制流代码怎么用_Python学习笔记控制流的元素

    随笔记录方便自己和同路人查阅. #------------------------------------------------我是可耻的分割线--------------------------- ...

最新文章

  1. Yann Lecun最新演讲:机器怎样进行有效学习?
  2. SQL-Oracle游标
  3. SAP Marketing Cloud功能简述(四) : 线索和客户管理
  4. token的作用_说一说Coin和Token有什么不同
  5. SpringBoot 下 Mybatis 的缓存
  6. allwinner h6 armv8 SylixOS 启动分析
  7. 软件工程之软件概要设计
  8. 2013年全国天线年会参展商名录及观展指南
  9. USB转串口那些事儿—串口驱动类型
  10. 最大流最小割经典例题_hiho 第116周,最大流最小割定理,求最小割集S,T
  11. 用Prolog解决数独
  12. 计算机中if函数的使用方法,如何在Excel 中使用IF函数
  13. 多糖类水凝胶构建制备介绍(瑞禧多糖水凝胶简述)
  14. JETT(二)-Java简单实现
  15. 如何创建一个javaWeb项目
  16. adf被打开_HP Laserjet M1522nf 出现ADF门打开 是什么意思
  17. Homekit智能家居DIY一WIFI智能插座
  18. ubuntu安装水星MW150US无线网卡8188eu驱动
  19. java中for break的用法_java break语句的使用方法
  20. 【Python】PermissionError: [Errno 13] Permission denied: ‘xxx.xlsx‘问题解决

热门文章

  1. 常见的国内外Linux服务器运维面板汇总
  2. Fedora9中安装中文输入法
  3. 文件系统FAT32、NTFS、exFAT的对比
  4. Laya位图字体制作
  5. 怎么改变鼠标图案HTML,怎么换鼠标指针的颜色和图案?
  6. 使用 Visual Studio 发布 .NET 控制台应用程序
  7. win10截图快捷键
  8. 【jiasuba】教你快速更改系统图标大小
  9. 【攻略】舰これ辅助程式介绍-航海日志
  10. kali PHP网站渗透,小白日记35:kali渗透测试之Web渗透