在Ubuntu上安装Python3.6的tkinter

22
+--------+-----------------------------------+
|   OS   |           Ubuntu 12.04            |
+--------+-----------------------------------+
| Python | 2.7, 3.2 and source installed 3.6 |
+--------+-----------------------------------+

由于 Python 3 存在两个版本,从存储库安装的任何内容都无法用于 Python 3.6。 存储库中的最新 Python 版本为 3.2,因此我需要通过源代码或 pip3.6 安装。

在启动 python3.6 后,我尝试导入 tkinter,但遇到以下错误,即使 help('modules') 返回了包括 tkinter 在内的模块列表。

 import tkinter
 ModuleNotFoundError: No module named '_tkinter'

我尝试在 python3.2 中做同样的事情,但是没有错误。 tkinter._tkinter 给出了 python3.2 的 tkinter 库位置。

我进入了包含所有库文件的 python3.6 目录,发现确实缺少 tkinter.so 对象文件。

如何修复此错误?

我想让 tkinter/tkagg 起作用,因为似乎所有的模块/包都已经安装好了。

经过更多搜索,我发现需要重新构建带有 Tcl/Tk 选项的 python3.6。但我不想这样做,从头开始安装 python3.6 大约需要1小时左右。

还有其他方法可以告诉 python3.6 Tcl/Tk 的位置吗?

问题不在于告诉 python tcl/tk 的位置。经过研究 python3.6 的源代码,并将其与 python3.2 进行比较,我发现 tkinter 调用的 _tkinter 不是一个 python 文件,而是一个 .so(共享对象) 文件,它是在安装时通过使用 gcc 由 setup.py 构建的,这可能涉及 distutils。

新的、更合适的问题是如何从 tcl/tk 构建 _tkinter.cpython-36m-i386-linux-gnu.so

注意:我已经安装了 tcl/tk,使用 tclsh 和 wish 进行了确认。


try from tkinter import * - johnson lai
刚刚试了一下,还是出现了同样的错误。@johnsonlai 另外,我不会使用 tkinter,我会用 matplotlib。 - lapin
我知道我应该这样做,@Marvo,但我需要立即为一些短时间工作。 - lapin
1
apt get install python3.6-tk - Boki
1
@Boki,事情不是那样的。12.04的ppa最新的Python版本是3.2,deadsnakes的ppa最新的是3.5,而且只有核心Python。要能够apt-get,该软件包必须存在于ppa中。 - lapin
6个回答

13

从终端运行:

sudo apt-get install python3.6-tk

或者完全重新安装:

sudo apt-get install python3.6

11

Python 3.6.4版本(Ubuntu 18.04 LTS)

sudo add-apt-repository main

sudo apt-get install python3-tk

2
在搜索了将近两个小时后,这个解决方案才真正对我起作用。谢谢。 - Gaurav Jain

5
我遇到了与你类似的问题,这里我将详细说明问题以及我是如何解决它的。
在Ubuntu 16.04 LTS上,我有Python 3.5.2和Python 2.7.12,但我想尝试Python3.6(出于各种原因,例如像这个),因此我依赖于这个post
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt-get update
sudo apt-get install python3.6

当我尝试运行一个使用tkinter的模块时,出现了以下错误信息:
Traceback (most recent call last):
  File "/usr/lib/python3.6/tkinter/__init__.py", line 37, in <module>
    import _tkinter
ModuleNotFoundError: No module named '_tkinter'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "bill.py", line 3, in <module>
    from tkinter import Canvas, Label, Tk, StringVar, Button, LEFT
  File "/usr/lib/python3.6/tkinter/__init__.py", line 39, in <module>
    raise ImportError(str(msg) + ', please install the python3-tk package')
ImportError: No module named '_tkinter', please install the python3-tk package

我尝试按照上面的提示安装tkinter:

sudo apt-get install python3-tk
[sudo] password for begueradj: 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
python3-tk is already the newest version (3.5.1-1).
0 upgraded, 0 newly installed, 0 to remove and 8 not upgraded.

显然,我仍然不能在Python 3.6中使用tkinter。如何解决这个问题?
我的第一次尝试没有成功:
sudo apt-get install python36-tk
Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package python36-tk

第二个有效:
sudo apt-get install python3.6-tk
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Suggested packages:
  tix python3.6-tk-dbg
The following NEW packages will be installed:
  python3.6-tk
0 upgraded, 1 newly installed, 0 to remove and 8 not upgraded.
Need to get 74.6 kB of archives.
After this operation, 165 kB of additional disk space will be used.
Get:1 http://ppa.launchpad.net/deadsnakes/ppa/ubuntu xenial/main amd64 python3.6-tk amd64 3.6.5-1+xenial1 [74.6 kB]
Fetched 74.6 kB in 0s (301 kB/s)        
Selecting previously unselected package python3.6-tk:amd64.
(Reading database ... 324106 files and directories currently installed.)
Preparing to unpack .../python3.6-tk_3.6.5-1+xenial1_amd64.deb ...
Unpacking python3.6-tk:amd64 (3.6.5-1+xenial1) ...
Setting up python3.6-tk:amd64 (3.6.5-1+xenial1) ...

这解决了我的问题:

~/python3.6
Python 3.6.5 (default, Mar 29 2018, 03:28:50) 
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import tkinter
>>> 

神秘地,这对我来说不起作用。apt install python3.6-tk显示"注意,选择'python3-tk'而不是'python3.6-tk'",然后继续安装python3-tk - waterproof

1
尝试一下这些代码,它可能会有帮助。
os.environ['TCL_LIBRARY'] = r'C:\Users\asus\AppData\Local\Programs\Python\Python36-32\tcl\tcl8.6'
os.environ['TK_LIBRARY'] = r'C:\Users\asus\AppData\Local\Programs\Python\Python36-32\tcl\tk8.6'

执行前请重新检查路径。


1

在Ubuntu 20.04上安装了Python3.8.2,尝试导入tkinter但失败了。出现以下错误:

da0xxx:~/python_trn/pygui$ python3 -m tkinter /usr/bin/python3: No module named tkinter

但是运行了下面的命令:

da0xxx:~/python_trn/pygui$ sudo apt-get install python3-tk

现在可以成功导入tkinter了!

da0xxx:~/python_trn/pygui$ python3 Python 3.8.2 (default, Apr 27 2020, 15:53:34) [GCC 9.3.0] on linux Type "help", "copyright", "credits" or "license" for more information.

import tkinter as tk

感谢以上内容!


1

Python版本3.6.4(Ubuntu 18.04 LTS)

我遇到了相同的错误:找不到tkinter模块。即使我尝试通过pip安装, $ pip install tkinter 我仍然收到下面的错误信息:

Collecting tkinter
  Could not find a version that satisfies the requirement tkinter (from versions: )
No matching distribution found for tkinter

我尝试通过运行以下命令安装Python3.6的tkinter,并且这个方法对我有效$ sudo apt-get install python3.6-tk


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接