【问题标题】:ModuleNotFoundError: No module named '_tkinter' within virtualenvModuleNotFoundError:virtualenv 中没有名为“_tkinter”的模块
【发布时间】:2021-02-10 16:48:14
【问题描述】:

我有一个使用 virtualenv (pipenv) 设置的 python 项目。我使用pipenv shell 来创建虚拟环境,并且在他们的内部我能够使用python main.py 运行我的脚本

ma​​in.py

import tkinter
import matplotlib
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt
import numpy as np


x = np.arange(0, 5, 0.1);
y = np.sin(x)
plt.plot(x, y)
plt.show()

我正在尝试显示绘图,但出现以下错误:

文件 "/home/linuxbrew/.linuxbrew/opt/python@3.8/lib/python3.8/tkinter/init.py", 第 36 行,在 import _tkinter # 如果失败,你的 Python 可能没有配置为 Tk ModuleNotFoundError: No module named '_tkinter'

我尝试过 sudo apt-get install python3-tk 并重新创建虚拟环境,但这确实有效。

  1. 有没有其他方法可以在没有 tkinter 的情况下显示绘图? matplotlib.use('TkAgg')
  2. 我可以从 virtualenv 中安装 tkinter 吗?
  3. virtualenv 能否访问机器版本的 tkinter (python3-tk)

Python 3.8.5

【问题讨论】:

    标签: python python-3.x matplotlib tkinter


    【解决方案1】:

    要解决这个问题,您可以使用不同的matplotlib backend,它可以在虚拟环境中工作,因为我们可以通过 pip 安装它。

    安装

    pip install Qt5Agg
    

    pipenv install Qt5Agg
    

    用法

    import matplotlib
    matplotlib.use('Qt5Agg')
    import matplotlib.pyplot as plt
    
    x = np.arange(0, 5, 0.1);
    y = np.sin(x)
    plt.plot(x, y)
    plt.show()
    

    【讨论】:

      【解决方案2】:

      您可以使用以下声明跳过在matplotlib 中使用tkinter

      import matplotlib
      matplotlib.use('agg')
      import matplotlib.pyplot as plt
      

      'agg'激活一个不同于tkinter的后端

      【讨论】:

      • 这不起作用。 UserWarning: Matplotlib 目前正在使用 agg,这是一个非 GUI 后端,因此无法显示该图。 plt.show()
      猜你喜欢
      • 2020-03-06
      • 2020-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-09
      • 2021-10-03
      • 2015-10-30
      相关资源
      最近更新 更多