rendered paste body#!/usr/bin/env pythonimport pygtkpygtk.require('2.0')import gtkimport twainclass ScanImage: def __init__(self, name): self.invisible = gtk.Invisible() self.invisible.realize() self.WindowID = self.invisible.window.handle (self.SD, self.SM) = (None, None) self.name = name self.Acquire() def Shutdown(self): if self.SD: self.SD.destroy() if self.SM: self.SM.destroy() if self.invisible: self.invisible.destroy() gtk.main_quit() def GetTwainSource(self): self.SM = twain.SourceManager(self.WindowID, ProductName="VMS Scan") self.SM.SetCallback(self.OnTwainEvent) self.SD = self.SM.OpenSource() def Acquire(self): if not self.SM: self.GetTwainSource() self.SD.SetCapability(twain.ICAP_XRESOLUTION, twain.TWTY_FIX32, 150.0) self.SD.SetCapability(twain.ICAP_YRESOLUTION, twain.TWTY_FIX32, 150.0) self.SD.RequestAcquire(0) self.TwainMessage = None def ProcessXFer(self, event): (handle, more_to_come) = self.SD.XferImageNatively() twain.DIBToBMFile(handle, self.name) twain.GlobalHandleFree(handle) def OnTwainEvent(self, event): if event == twain.MSG_XFERREADY: self.ProcessXFer(event) self.Shutdown() elif event == twain.MSG_CLOSEDSREQ: self.Shutdown() def main(self): gtk.main() filename = "test.bmp"scan = ScanImage(filename)scan.main()