用 wxPython 打印你的 App
发布日期:2021-05-08 01:20:55 浏览次数:8 分类:原创文章

本文共 3811 字,大约阅读时间需要 12 分钟。

参考文献《wxPython Cookbook》 Micheal Driscoll

效果:

在这里插入图片描述
在这里插入图片描述

代码

# -*- coding: utf-8 -*-"""Created on Thu Jul  9 12:27:03 2020@author: Administrator"""import sysimport wximport snapshotPrinterclass MainFrame(wx.Frame):    def __init__(self):        wx.Frame.__init__(self,None,title='Screenshot Tutorial')        panel = wx.Panel(self)                screenshotBtn = wx.Button(panel,label='Take Screenshot')        screenshotBtn.Bind(wx.EVT_BUTTON,self.onScreenshot)                printBtn = wx.Button(panel,label='Print Screenshot')        printBtn.Bind(wx.EVT_BUTTON,self.onPrint)                sizer = wx.BoxSizer(wx.HORIZONTAL)        sizer.Add(screenshotBtn,0,wx.ALL|wx.CENTER,5)   #此时5是高度间距        sizer.Add(printBtn,0,wx.ALL|wx.CENTER,5)                panel.SetSizer(sizer)        def onScreenshot(self,event):        print('Taking screenshot...')        rect = self.GetRect()                dcScreen = wx.ScreenDC()                bmp = wx.EmptyBitmap(rect.width,rect.height)                memDC = wx.MemoryDC()        memDC.SelectObject(bmp)        memDC.Blit(0,                   0,                   rect.width,                   rect.height,                   dcScreen,                   rect.x,                   rect.y)        memDC.SelectObject(wx.NullBitmap)        img = bmp.ConvertToImage()        fileName = 'myImage.png'        img.SaveFile(fileName,wx.BITMAP_TYPE_PNG)        print('...saving as png!')            def onPrint(self,event):        printer = snapshotPrinter.SnapshotPrinter()        printer.sendToPrinter()        if __name__ == "__main__":    app = wx.App(False)    frame = MainFrame()    frame.Show()    app.MainLoop()

snapshotPrinter.py:

# -*- coding: utf-8 -*-"""Created on Thu Jul  9 12:51:49 2020@author: Administrator"""import osimport wxfrom wx.html import HtmlEasyPrinting, HtmlWindowclass SnapshotPrinter(wx.Frame):    def __init__(self,title='Snapshot Printer'):        wx.Frame.__init__(self,None,title=title,size=(650,400))                self.panel = wx.Panel(self)                self.printer = HtmlEasyPrinting(name='Printing',                                        parentWindow=None)        self.html = HtmlWindow(self.panel)        self.html.SetRelatedFrame(self,self.GetTitle())                if not os.path.exists('screenshot.htm'):            self.createHtml()                self.html.LoadPage('screenshot.htm')                pageSetupBtn = wx.Button(self.panel,label='Page Setup')        printBtn = wx.Button(self.panel,label='Print')        cancelBtn = wx.Button(self.panel,label='Cancel')                pageSetupBtn.Bind(wx.EVT_BUTTON,self.onSetup)        printBtn.Bind(wx.EVT_BUTTON,self.onPrint)        cancelBtn.Bind(wx.EVT_BUTTON,self.onCancel)                sizer = wx.BoxSizer(wx.VERTICAL)        btnSizer = wx.BoxSizer(wx.HORIZONTAL)                sizer.Add(self.html,1,wx.GROW)        btnSizer.Add(pageSetupBtn,0,wx.ALL,5)        btnSizer.Add(printBtn,0,wx.ALL,5)        btnSizer.Add(cancelBtn,0,wx.ALL,5)        sizer.Add(btnSizer)                self.panel.SetSizer(sizer)        self.panel.SetAutoLayout(True)            def createHtml(self):        print('creating html ...')        html = '''<html>\n<body>\n<center>        <img src=myImage.png width=516,height=314>        </center>\n</body>\n</html>        '''        with open('screenshot.htm','w') as fobj:            fobj.write(html)        def onSetup(self,event):        self.printer.PageSetup()        def onPrint(self,event):        self.sendToPrinter()            def sendToPrinter(self):        self.printer.GetPrintData().SetPaperId(wx.PAPER_LETTER)        self.printer.PrintFile(self.html.GetOpenedPage())            def onCancel(self,event):        self.Close()        if __name__ == '__main__':    app = wx.App(False)    frame = SnapshotPrinter()    frame.Show()    app.MainLoop()
上一篇:gazebo升级 ‘Any’ is not a member of ‘gazebo::msgs’
下一篇:ubuntu下用boost python进行c++ python3混合编程

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2025年03月18日 07时00分43秒