Hi, I just ran into the following Bug: When choosing Qt4Agg as my backend in the matplotlibrc, using TeX will break matplotlib. When choosing backend: MacOSX, everything works fine. The QT4Agg backend also works fine as long as I'm not using TeX. Here is a fairly minimal example:
######### file: killqtmpl.py ######### import pylab as plt import time print "This works" plt.rcdefaults() plt.plot([1,2,3]) plt.show() time.sleep(2) plt.close() print "This won't work with qt4agg" plt.rc('font', family='sans-serif') plt.rc('text', usetex=True) plt.rcParams['text.latex.preamble']=r""" \usepackage[tx]{sfmath} \usepackage{helvet} """ plt.plot([1,2,3]) plt.show() time.sleep(2) plt.close() print "This won't either" plt.rc('font', family='serif') plt.rcParams['text.latex.preamble']=r"\usepackage{mathptmx}" plt.plot([1,2,3]) plt.show() ############################# So, when i run the above script using the MacOSX backend, it displays the same figure (a blue line) three times and outputs: ------- This works This won't work with qt4agg This won't either ------- Now when using Qt4Agg, only the first figure will get displayed and the following error messages appear: ------- In [1]: run killqtmpl.py This works This won't work with qt4agg ERROR: An unexpected error occurred while tokenizing input The following traceback may be corrupted or invalid The error message is: ('EOF in multi-line statement', (17, 0)) ERROR: An unexpected error occurred while tokenizing input The following traceback may be corrupted or invalid The error message is: ('EOF in multi-line statement', (15, 0)) --------------------------------------------------------------------------- AttributeError Traceback (most recent call last) /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/backends/backend_qt4agg.pyc in paintEvent(self, e) 80 81 if self.replot: ---> 82 FigureCanvasAgg.draw(self) 83 self.replot = False 84 /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/backends/backend_agg.pyc in draw(self) 399 400 self.renderer = self.get_renderer() --> 401 self.figure.draw(self.renderer) 402 403 def get_renderer(self): /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/artist.pyc in draw_wrapper(artist, renderer, *args, **kwargs) 53 def draw_wrapper(artist, renderer, *args, **kwargs): 54 before(artist, renderer) ---> 55 draw(artist, renderer, *args, **kwargs) 56 after(artist, renderer) 57 /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/figure.pyc in draw(self, renderer) 882 dsu.sort(key=itemgetter(0)) 883 for zorder, func, args in dsu: --> 884 func(*args) 885 886 renderer.close_group('figure') /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/artist.pyc in draw_wrapper(artist, renderer, *args, **kwargs) 53 def draw_wrapper(artist, renderer, *args, **kwargs): 54 before(artist, renderer) ---> 55 draw(artist, renderer, *args, **kwargs) 56 after(artist, renderer) 57 /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/axes.pyc in draw(self, renderer, inframe) 1981 1982 for zorder, a in dsu: -> 1983 a.draw(renderer) 1984 1985 renderer.close_group('axes') /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/artist.pyc in draw_wrapper(artist, renderer, *args, **kwargs) 53 def draw_wrapper(artist, renderer, *args, **kwargs): 54 before(artist, renderer) ---> 55 draw(artist, renderer, *args, **kwargs) 56 after(artist, renderer) 57 /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/axis.pyc in draw(self, renderer, *args, **kwargs) 1035 1036 ticks_to_draw = self._update_ticks(renderer) -> 1037 ticklabelBoxes, ticklabelBoxes2 = self._get_tick_bboxes(ticks_to_draw, renderer) 1038 1039 for tick in ticks_to_draw: /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/axis.pyc in _get_tick_bboxes(self, ticks, renderer) 986 for tick in ticks: 987 if tick.label1On and tick.label1.get_visible(): --> 988 extent = tick.label1.get_window_extent(renderer) 989 ticklabelBoxes.append(extent) 990 if tick.label2On and tick.label2.get_visible(): /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/text.pyc in get_window_extent(self, renderer, dpi) 745 raise RuntimeError('Cannot get window extent w/o renderer') 746 --> 747 bbox, info = self._get_layout(self._renderer) 748 x, y = self.get_position() 749 x, y = self.get_transform().transform_point((x, y)) /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/text.pyc in _get_layout(self, renderer) 307 w, h, d = get_text_width_height_descent(clean_line, 308 self._fontproperties, --> 309 ismath=ismath) 310 else: 311 w, h, d = 0, 0, 0 /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/backends/backend_agg.pyc in get_text_width_height_descent(self, s, prop, ismath) 172 fontsize = prop.get_size_in_points() 173 w, h, d = texmanager.get_text_width_height_descent(s, fontsize, --> 174 renderer=self) 175 return w, h, d 176 /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/texmanager.pyc in get_text_width_height_descent(self, tex, fontsize, renderer) 606 dvifile = self.make_dvi(tex, fontsize) 607 dvi = dviread.Dvi(dvifile, 72*dpi_fraction) --> 608 page = iter(dvi).next() 609 dvi.close() 610 # A total height (including the descent) needs to be returned. /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/dviread.pyc in __iter__(self) 63 """ 64 while True: ---> 65 have_page = self._read() 66 if have_page: 67 yield self._output() /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/dviread.pyc in _read(self) 119 while True: 120 byte = ord(self.file.read(1)) --> 121 self._dispatch(byte) 122 # if self.state == _dvistate.inpage: 123 # matplotlib.verbose.report( /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/dviread.pyc in _dispatch(self, byte) 207 c, s, d, a, l = [ self._arg(x) for x in (4, 4, 4, 1, 1) ] 208 n = self.file.read(a+l) --> 209 self._fnt_def(k, c, s, d, a, l, n) 210 elif byte == 247: 211 i, num, den, mag, k = [ self._arg(x) for x in (1, 4, 4, 4, 1) ] /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/dviread.pyc in _fnt_def(self, k, c, s, d, a, l, n) 368 # (d, tfm.design_size, n) 369 --> 370 vf = _vffile(n[-l:]) 371 372 self.fonts[k] = DviFont(scale=s, tfm=tfm, texname=n, vf=vf) /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/dviread.pyc in _vffile(texname) 879 880 def _vffile(texname): --> 881 return _fontfile(texname, Vf, '.vf', _vfcache) 882 883 /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/dviread.pyc in _fontfile(texname, class_, suffix, cache) 868 filename = find_tex_file(texname + suffix) 869 if filename: --> 870 result = class_(filename) 871 else: 872 result = None /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/dviread.pyc in __init__(self, filename) 477 self._chars = {} 478 self._packet_ends = None --> 479 self._read() 480 self.close() 481 /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/dviread.pyc in _read(self) 119 while True: 120 byte = ord(self.file.read(1)) --> 121 self._dispatch(byte) 122 # if self.state == _dvistate.inpage: 123 # matplotlib.verbose.report( /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/dviread.pyc in _dispatch(self, byte) 506 self._init_packet(pl, cc, tfm) 507 elif 243 <= byte <= 246: --> 508 Dvi._dispatch(self, byte) 509 elif byte == 247: # preamble 510 i, k = self._arg(1), self._arg(1) /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/dviread.pyc in _dispatch(self, byte) 207 c, s, d, a, l = [ self._arg(x) for x in (4, 4, 4, 1, 1) ] 208 n = self.file.read(a+l) --> 209 self._fnt_def(k, c, s, d, a, l, n) 210 elif byte == 247: 211 i, num, den, mag, k = [ self._arg(x) for x in (1, 4, 4, 4, 1) ] /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/dviread.pyc in _fnt_def(self, k, *args) 544 545 def _fnt_def(self, k, *args): --> 546 Dvi._fnt_def(self, k, *args) 547 if self._first_font is None: 548 self._first_font = k /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/dviread.pyc in _fnt_def(self, k, c, s, d, a, l, n) 370 vf = _vffile(n[-l:]) 371 --> 372 self.fonts[k] = DviFont(scale=s, tfm=tfm, texname=n, vf=vf) 373 374 def _post(self): /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/dviread.pyc in __init__(self, scale, tfm, texname, vf) 416 self.size = scale * (72.0 / (72.27 * 2**16)) 417 try: --> 418 nchars = max(tfm.width.iterkeys()) + 1 419 except ValueError: 420 nchars = 0 AttributeError: 'NoneType' object has no attribute 'width' This won't either --------------------------------------------------------------------------- AttributeError Traceback (most recent call last) /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/backends/backend_qt4agg.pyc in paintEvent(self, e) 80 81 if self.replot: ---> 82 FigureCanvasAgg.draw(self) 83 self.replot = False 84 /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/backends/backend_agg.pyc in draw(self) 399 400 self.renderer = self.get_renderer() --> 401 self.figure.draw(self.renderer) 402 403 def get_renderer(self): /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/artist.pyc in draw_wrapper(artist, renderer, *args, **kwargs) 53 def draw_wrapper(artist, renderer, *args, **kwargs): 54 before(artist, renderer) ---> 55 draw(artist, renderer, *args, **kwargs) 56 after(artist, renderer) 57 /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/figure.pyc in draw(self, renderer) 882 dsu.sort(key=itemgetter(0)) 883 for zorder, func, args in dsu: --> 884 func(*args) 885 886 renderer.close_group('figure') /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/artist.pyc in draw_wrapper(artist, renderer, *args, **kwargs) 53 def draw_wrapper(artist, renderer, *args, **kwargs): 54 before(artist, renderer) ---> 55 draw(artist, renderer, *args, **kwargs) 56 after(artist, renderer) 57 /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/axes.pyc in draw(self, renderer, inframe) 1981 1982 for zorder, a in dsu: -> 1983 a.draw(renderer) 1984 1985 renderer.close_group('axes') /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/artist.pyc in draw_wrapper(artist, renderer, *args, **kwargs) 53 def draw_wrapper(artist, renderer, *args, **kwargs): 54 before(artist, renderer) ---> 55 draw(artist, renderer, *args, **kwargs) 56 after(artist, renderer) 57 /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/axis.pyc in draw(self, renderer, *args, **kwargs) 1035 1036 ticks_to_draw = self._update_ticks(renderer) -> 1037 ticklabelBoxes, ticklabelBoxes2 = self._get_tick_bboxes(ticks_to_draw, renderer) 1038 1039 for tick in ticks_to_draw: /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/axis.pyc in _get_tick_bboxes(self, ticks, renderer) 986 for tick in ticks: 987 if tick.label1On and tick.label1.get_visible(): --> 988 extent = tick.label1.get_window_extent(renderer) 989 ticklabelBoxes.append(extent) 990 if tick.label2On and tick.label2.get_visible(): /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/text.pyc in get_window_extent(self, renderer, dpi) 745 raise RuntimeError('Cannot get window extent w/o renderer') 746 --> 747 bbox, info = self._get_layout(self._renderer) 748 x, y = self.get_position() 749 x, y = self.get_transform().transform_point((x, y)) /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/text.pyc in _get_layout(self, renderer) 307 w, h, d = get_text_width_height_descent(clean_line, 308 self._fontproperties, --> 309 ismath=ismath) 310 else: 311 w, h, d = 0, 0, 0 /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/backends/backend_agg.pyc in get_text_width_height_descent(self, s, prop, ismath) 172 fontsize = prop.get_size_in_points() 173 w, h, d = texmanager.get_text_width_height_descent(s, fontsize, --> 174 renderer=self) 175 return w, h, d 176 /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/texmanager.pyc in get_text_width_height_descent(self, tex, fontsize, renderer) 606 dvifile = self.make_dvi(tex, fontsize) 607 dvi = dviread.Dvi(dvifile, 72*dpi_fraction) --> 608 page = iter(dvi).next() 609 dvi.close() 610 # A total height (including the descent) needs to be returned. /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/dviread.pyc in __iter__(self) 63 """ 64 while True: ---> 65 have_page = self._read() 66 if have_page: 67 yield self._output() /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/dviread.pyc in _read(self) 119 while True: 120 byte = ord(self.file.read(1)) --> 121 self._dispatch(byte) 122 # if self.state == _dvistate.inpage: 123 # matplotlib.verbose.report( /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/dviread.pyc in _dispatch(self, byte) 207 c, s, d, a, l = [ self._arg(x) for x in (4, 4, 4, 1, 1) ] 208 n = self.file.read(a+l) --> 209 self._fnt_def(k, c, s, d, a, l, n) 210 elif byte == 247: 211 i, num, den, mag, k = [ self._arg(x) for x in (1, 4, 4, 4, 1) ] /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/dviread.pyc in _fnt_def(self, k, c, s, d, a, l, n) 361 def _fnt_def(self, k, c, s, d, a, l, n): 362 tfm = _tfmfile(n[-l:]) --> 363 if c != 0 and tfm.checksum != 0 and c != tfm.checksum: 364 raise ValueError, 'tfm checksum mismatch: %s'%n 365 # It seems that the assumption behind the following check is incorrect: AttributeError: 'NoneType' object has no attribute 'checksum' -------- My system: A Macbook Pro with OS X 10.7.4, 4GB ram. I'm using the latest py27-ipython from macports (@12.1). I also installed the qtconsole dependencies and therefore py27-pyqt4 last week using macports. Darwin macbookpro2009.fritz.box 11.4.0 Darwin Kernel Version 11.4.0: Mon Apr 9 19:32:15 PDT 2012; root:xnu-1699.26.8~1/RELEASE_X86_64 x86_64 Matplotlib-Version: 1.1.0 Backend Qt4Agg version 4.9.1 At the moment I can just stick with the MacOSX backend, but hopefully this message will help someone fix the bug. Best regards, Felix Patzelt ------------------------------------------------------------------------------ Live Security Virtual Conference Exclusive live event will cover all the ways today's security and threat landscape has changed and how IT managers can respond. Discussions will include endpoint security, mobile security and the latest in malware threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/ _______________________________________________ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users