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
printdocument python_python学习笔记之wxpython打印预览相关推荐
- C# PrintDocument 打印 和 打印预览
.封装好的辅助类: [csharp] view plaincopy print? using System; using System.Data; using System.Drawing; usin ...
- C# 打印预览 PrintDocument打印、打印预览
#region 打印预览#region 变量 常量//以下用户可自定义 //当前要打印文本的字体及字号 private const int HeadHeight = 40;private static ...
- C# 使用自带的组件PrintPreviewDialog 和 PrintDocument实现打印预览(一)
文章目录 前言 相关内容了解 打印预览功能 1 创建winform工程 2 创建要打印的测试数据 3 绘制打印页 绘制页脚 绘制内容 PrintPage事件 完整的代码工程 小节 前言 有这么个需求: ...
- word文档打印预览有阴影_在打印预览中编辑Word文档
word文档打印预览有阴影 While viewing a Word document in the Print Preview window, you might notice a typo, or ...
- .NET环境下有关打印页面设置、打印机设置、打印预览对话框的实现
原文:.NET环境下有关打印页面设置.打印机设置.打印预览对话框的实现 我个人认为,开发MIS,首先就得解决网格的问题,而开发工具为我们提供了如DataGrid.MSHFlexGrid的控件.其次,是 ...
- C#实现打印与打印预览功能
C#实现打印与打印预览功能 发表日期:2010年12月31日 作者:whitewin 点击:102次 在windows应用程序中文档的打印是一项非常重要的功能,在以前一直是一个非常复杂的工作,Micr ...
- c#endread怎么打印出来_C#教程之打印和打印预览
最近研究一了一下关于PDF打印和打印预览的功能,在此小小的总结记录一下学习过程. 实现打印和打印预览的方法,一般要实现如下的菜单项:打印.打印预览.页面设置. PrintDocument类 Print ...
- php打印预览jquery,JS实现浏览器打印、打印预览示例
目前正在做浏览器端采用JS方式实现打印这么一个功能,JS打印实现的方法很多,但是兼容各个浏览器实现打印预览的功能有些棘手,现将实现的内容及遇到的问题记录下来,希望有大牛看到所提的问题后可以给予解答,在 ...
- NET环境下有关打印页面设置、打印机设置、打印预览对话框的实现-
到网上一搜,有很多关于打印页面设置值怎么老是变.自定义纸张和连续走纸的问题.有很多说法,有些说是VS.NET的bug,有的说必须用API,还有的说... 其实,是我们自己没有研究透,这里给一些 ...
最新文章
- CentOS7下ntp安装步骤
- iOS 自定义 View
- javascript技巧及常用事件方法集合(全)
- [leetcode] 117 填充每个节点的下一个右侧节点指针
- 如何自定义Hibernate脏检查机制
- 实验一 DOS命令解释程序的编写
- (BFS)uva2554-Snakes Ladders
- 管理学定律七:责任分散效应与帕金森定律
- DAY 5 综合练习 - 学籍注册小程序 棋牌游戏发牌程序
- 卷积操作改进之Involution: Inverting the Inherence of Convolution for Visual Recognition
- Hbuilder如何替换选中代码快捷键
- 如何把照片转换成jpg格式呢?
- RK3566和S905X3/S905X4对比哪个好?
- 大脑皮层由神经组织构成,大脑神经网络结构图片
- 给服务器安装debian系统,安装Debian 10 Buster的方法
- python对于字典d d.get(x、y)_python--字典
- Java应用_模拟微信抢红包
- PCIE控制器——数据链路层——DLLP报文
- CC00042.CloudKubernetes——|KuberNetes二进制部署.V20|5台Server|——|kubernetes配置|生产环境关键性配置|
- 高楼扔鸡蛋问题-经典动态规划
热门文章
- python3字符串转数字_Python3基础语法和基本数据类型
- java 字符串实例_Java字符串实例
- 拼接大屏数据展示_可视化大屏的UI设计是根据哪几个方面来进行?
- html5群组选择器,css选择器
- eps倾斜摄影矢量化采集毕业设计_eps倾斜摄影矢量化dlg采集
- 12nm 制程、Zen+ 微架构 AMD Ryzen 7 2700X 处理器详细测试 - 电脑领域 HKEPC Hard
- C++ std::remove/std::remove_if/erase用法探讨
- SpringBoot的编码问题
- 预处理prepareStatement是怎么防止sql注入漏洞的?
- 华为笔记本matebook13_华为引领“第三代移动办公”新纪元 华为MateBook开启“智慧化办公”新赛道...