本文介绍了_tkinter.TclError:新OS X小牛没有显示名称,也没有$ DISPLAY环境变量的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我的第一篇文章,因此请原谅.

This is my first post so please be forgiving.

我正在尝试使用matplotlib创建动画,直到几天前,直到升级到OS X Mavericks为止,我都可以做得很好.请注意,以下代码在OS X Lion中有效.

I am trying to create an animation using matplotlib, and I could do this perfectly well until a few days ago, until I upgraded to OS X Mavericks, upon which all hell broke loose. Note, the below code worked in OS X Lion.

突然,我试图在Mavericks中运行此代码时收到一条错误消息:

Suddenly I was getting an error message whilst trying to run this code in Mavericks:

import numpy as np
import matplotlib
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import pandas as pd
import mpl_toolkits.mplot3d.axes3d as p3

#----->READ AND FORMAT DATA-----------------------------------------------#
.
.
.
.

#-------------------------------------------------------------------------#

# Set up figure & 3D axis for animation
fig = plt.figure(figsize=(10,10))
ax = fig.add_axes([0, 0, 1, 1], projection='3d') # Correct way to make 3D plots

# set up lines and points
lines = sum([ax.plot([], [], [], '-')], [])
pts = sum([ax.plot([], [], [], 'o')], [])

# Setting the axes properties
ax.set_xlim3d([-2000, 2000])
ax.set_xlabel('X')
ax.set_ylim3d([1350, 1400])
ax.set_ylabel('Y')
ax.set_zlim3d([-340, 600])
ax.set_zlabel('Z')

# set point-of-view: specified by (altitude degrees, azimuth degrees)
ax.view_init(40, 0)
ax.set_title('animation')
ax.grid() # add grid

# Initialisation function: plot the background of each frame
def init():
    for line, pt in zip(lines, pts):
        # Lines
        line.set_data([], [])
        line.set_3d_properties([])
        # Points
        pt.set_data([], [])
        pt.set_3d_properties([])
    return lines + pts

# Animation function.  This will be called sequentially with the frame number
def animate(i):
    # we'll step two time-steps per frame.  This leads to nice results.
    i = (2.5 * i)

    for line, pt, dat in zip(lines, pts, data):
        x, y, z = dat[:i].T
        # Lines
        line.set_data(x, y)
        line.set_3d_properties(z)
        # Points
        pt.set_data(x[-1:], y[-1:])
        pt.set_3d_properties(z[-1:])

    ax.view_init(45, i)
    fig.canvas.draw()
    return lines + pts

#----->ANIMATION-----------------------------------------------------------#

# Creating the Animation object
anim = animation.FuncAnimation(fig, animate, init_func=init,
                               frames=120, interval=30, blit=True)
# Save as mp4. This requires mplayer or ffmpeg to be installed
# anim.save('one_marker_3D.mp4', fps=15, extra_args=['-vcodec', 'libx264'])

plt.show()

这会产生以下错误消息:

This produces the following error message:

Traceback (most recent call last):
  File "shoulder_animation_walking_straight_3D.py", line 26, in <module>
    fig = plt.figure(figsize=(10,10))
  File "/Users/me/anaconda/lib/python2.7/site-packages/matplotlib/pyplot.py", line 423, in figure
    **kwargs)
  File "/Users/me/anaconda/lib/python2.7/site-packages/matplotlib/backends/backend_tkagg.py", line 79, in new_figure_manager
    return new_figure_manager_given_figure(num, figure)
  File "/Users/me/anaconda/lib/python2.7/site-packages/matplotlib/backends/backend_tkagg.py", line 87, in new_figure_manager_given_figure
    window = Tk.Tk()
  File "/Users/me/anaconda/lib/python2.7/lib-tk/Tkinter.py", line 1745, in __init__
    self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use)
_tkinter.TclError: no display name and no $DISPLAY environment variable

现在,正如您希望看到的那样,我已尝试使用TkAgg后端而不是文档建议的 https://wiki.python.org/moin/TkInter ).这似乎导致OS X的新版本出现问题,因为不再支持X11,而必须安装XQuartz.我也这样做了.但这仍然给我同样的错误.

Now as you can hopefully see, I have attempted to use the TkAgg backend instead of the 'Agg' backend, as recommended by the documentation (https://wiki.python.org/moin/TkInter). This seems to cause problems with the new version of OS X because X11 is not supported anymore, and XQuartz has to be installed instead. This I have done too. But it still give me that same error.

我也尝试使用macports安装py33-tkinter,但是那也不起作用,但是也许我做得不好.我只是做了

I also tried installing py33-tkinter using macports, but that didn't work either, but perhaps I did not do it properly. I simply did

sudo port py33-tkinter

对于python和unix来说,我还是一个相当陌生的人.

I am still fairly new to python and unix in general.

更新(13/12/13):

我做了以下

Python 2.7.5 |Anaconda 1.8.0 (x86_64)| (default, Oct 24 2013, 07:02:20)
[GCC 4.0.1 (Apple Inc. build 5493)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> import Tkinter

然后运行Tkinter测试

Then ran the Tkinter test

>>> Tkinter._test()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/me/anaconda/lib/python2.7/lib-tk/Tkinter.py", line 3770, in _test
    root = Tk()
  File "/Users/me/anaconda/lib/python2.7/lib-tk/Tkinter.py", line 1745, in __init__
    self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use)
_tkinter.TclError: no display name and no $DISPLAY environment variable
>>>

可能会对比我更了解这一点的人有所帮助.

Might be helpful to someone who knows this better than me.

推荐答案

解决方案

通过执行以下操作解决了此问题,这是由XQuartz的问题引起的;

This was solved by doing the following, which was caused by a problem with XQuartz;

launchctl load -w /Library/LaunchAgents/org.macosforge.xquartz.startx.plist

我认为重新安装XQuartz将重新启用启动,但是显然没有发生.现在一切正常.

I thought that a reinstall of XQuartz would re-enable launchd, but apparently that did not happen. Now it all works.

这篇关于_tkinter.TclError:新OS X小牛没有显示名称,也没有$ DISPLAY环境变量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-18 08:43