日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

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

發布時間:2025/3/12 python 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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打印预览的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。