Tkinter导入文件对话框错误

4

我正在尝试使用Python3的tkinter打开一张图像,这里是一段代码:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# --- Python 3.4

from PIL import Image
import Tkinter as tk
from Tkinter import filedialog
import numpy as np
import os
var = 'n'

# Importing the image to correct

while var != 'o' :
    var = raw_input("Press \"o\" to open the image to correct\n")
    var = var.lower()
root = tk.Tk()
root.withdraw()
path = filedialog.askopenfilename()
image_test = Image.open(path)

我已经安装了python3-tk,当我输入命令时,会弹出演示窗口。

python3 -m tkinter 

在终端中,我尝试了几种不起作用的组合:

import tkinter as tk
from tkinter import filedialog

提供
ImportError : No module named tkinter

,

import Tkinter as tk
from Tkinter import filedialog    

提供
ImportError : cannot import name filedialog

我尝试了_tinker、FileDialog和file_dialog,但每次都会出现“ImportError:无法导入名称filedialog”。有什么线索吗?
4个回答

17

tkinter.filedialog 只适用于 Python 3。

从您的尝试中,似乎您正在使用 Python 2.x,请尝试导入 tkFileDialog

示例 -

import tkFileDialog as filedialog

或者,您可以检查为什么会运行Python 2.x,而不是Python 3.x。

Tkinter 模块只存在于 Python 2 中,Python 3 有 tkinter 模块。因为在导入Tkinter时成功导入,但在导入tkinter时失败了,我们可以确定您最终运行的是Python 2.x而不是Python 3。

您可以执行以下操作 -

import sys
print(sys.version)
print(sys.executable)

查看当前运行的Python版本以及正在运行的python(或python3)的位置。


很可能,问题出在尽管您的脚本中有 python3 shebang行,但您很可能正在运行 python <script.py>,这总是导致运行Python 2。

添加python3 shebang行的目的是能够直接运行脚本,而不需要指定可执行文件。为此,您需要执行以下操作 -

  1. 将脚本赋予可执行权限。(使用chmod u+x < script.py >
  2. 然后按如下方式运行脚本 - ./< script.py >

确实正在运行Python2:2.7.6(默认,2015年6月22日,17:58:13) [GCC 4.8.2] /usr/bin/python 我正在尝试弄清如何使其运行Python3。 - Rémi Vennereau
它返回了/usr/bin/python3,我将其放在您的迷你代码头文件中。但它仍然返回2.7.6版本。我正在考虑尝试alias python=python3 - Rémi Vennereau
尝试运行“/usr/bin/python3”以查看它是否真的是Python3,其次您是如何将其放入头文件中的? - Anand S Kumar
运行它会返回 Python 3.4.0 (default, Jun 19 2015, 14:20:21) [GCC 4.8.2] on linux。我在 Python 上还很新,我所谓的“头部”是我的代码的前三行:`#!/usr/bin/env python3

-- coding: utf-8 --

--- Python 3.4`。

- Rémi Vennereau
1
我猜测在添加了 shebang(这是头文件的第一行)之后,您正在尝试使用 python <script> 运行,这将始终运行 python 2。您添加 shebang 的原因是为了能够在不必指定可执行文件的情况下运行,只需运行 - ./<script>.py 或运行 - python3 script.py - Anand S Kumar
你说得对,谢谢。我猜Geany使用的是python命令而不是python3,我会尝试更改它,或者像上面提到的那样使用alias - Rémi Vennereau

1

应该使用from tkinter import filedialog,或者你可以尝试from tkinter import *import tkinter.filedialog as fd。如果不起作用,那么你应该尝试重新安装Python。


0

我的Python版本是3.x,对我有效的简单技巧是

import tkinter.filedialog as fd

0

适用于Python3以上版本

from tkinter.filedialog import askopenfilename


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