If you face _tkinter.TclError when you run your python application based on MatPlotLib on CentOS 7, it might be caused by MatPlotLib choose Xwindows backend by default.
The error message will be like below:
$ python matplot_test.py
Traceback (most recent call last):
File "matplot_test.py", line 3, in <module>
plt.plot(["Seoul","Paris","Seattle"], [30,25,55])
File "/usr/lib64/python2.7/site-packages/matplotlib/pyplot.py", line 3352, in plot
ax = gca()
File "/usr/lib64/python2.7/site-packages/matplotlib/pyplot.py", line 969, in gca
return gcf().gca(**kwargs)
File "/usr/lib64/python2.7/site-packages/matplotlib/pyplot.py", line 586, in gcf
return figure()
File "/usr/lib64/python2.7/site-packages/matplotlib/pyplot.py", line 533, in figure
**kwargs)
File "/usr/lib64/python2.7/site-packages/matplotlib/backend_bases.py", line 161, in new_figure_manager
return cls.new_figure_manager_given_figure(num, fig)
File "/usr/lib64/python2.7/site-packages/matplotlib/backends/_backend_tk.py", line 1046, in new_figure_manager_given_figure
window = Tk.Tk(className="matplotlib")
File "/usr/lib64/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
In order to solve this problem, you need to set MatPlotLib by following codes on top of your codes.
import matplotlib
matplotlib.use('Agg')
...
<your original code>