Tkinter导入filedialog错误

Rém*_*eau 3 python tkinter python-3.x

我正在尝试使用tkinter和python3来打开图像,这里看到一段代码:

#!/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)
Run Code Online (Sandbox Code Playgroud)

我已经安装了python3-tk,当我写的时候我有了演示窗口

python3 -m tkinter 
Run Code Online (Sandbox Code Playgroud)

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

import tkinter as tk
from tkinter import filedialog
Run Code Online (Sandbox Code Playgroud)

ImportError : No module named tkinter
Run Code Online (Sandbox Code Playgroud)

,

import Tkinter as tk
from Tkinter import filedialog    
Run Code Online (Sandbox Code Playgroud)

ImportError : cannot import name filedialog
Run Code Online (Sandbox Code Playgroud)

我试过_tinker,FileDialog,file_dialog,但我总是有"ImportError:无法导入名称filedialog".任何线索?

Ana*_*mar 13

tkinter.filedialog 仅适用于Python 3.

根据您的尝试,您似乎正在使用Python 2.x,尝试导入tkFileDialog

示例 -

import tkFileDialog as filedialog
Run Code Online (Sandbox Code Playgroud)

或者,检查它最终运行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)
Run Code Online (Sandbox Code Playgroud)

检查当前运行的python的版本以及正在运行的python(或python3)的位置.


最有可能的是,问题出现了,因为即使python3你的脚本中有shebang行,你很可能正在运行python <script.py>,这总是会导致python 2运行.

添加python3shebang行的目的是能够直接运行脚本,而无需指定可执行文件.为此您需要做 -

  1. 为脚本提供可执行权限.(使用chmod u+x <script.py>)
  2. 然后运行脚本为 - ./<script.py>