本文共 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()
转载地址:http://gtsg.baihongyu.com/