Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 使用tkinter将Python 2.7转换为Python 3_Python 3.x_Tkinter - Fatal编程技术网

Python 3.x 使用tkinter将Python 2.7转换为Python 3

Python 3.x 使用tkinter将Python 2.7转换为Python 3,python-3.x,tkinter,Python 3.x,Tkinter,我有一个使用Python 2.7和Tkinter的工作应用程序,它使用以下结构: from Tkinter import * import Tkinter import tkFileDialog class Window(Frame): #... # other functional code #... def ChangeCWD(self): #CWD is current working direct

我有一个使用Python 2.7和Tkinter的工作应用程序,它使用以下结构:

from Tkinter import *
import Tkinter
import tkFileDialog

class Window(Frame):                  
    #...
    #     other functional code
    #...

    def ChangeCWD(self):       #CWD is current working directory
        root = Tkinter.Tk()
        root.withdraw()
        directory = tkFileDialog.askdirectory( ... )

root = Tk()
root.mainloop()
它有标签、按钮、画布、多帧和文件对话框,一切都很好。 我已经开始更新代码以在Python 3.5上工作,到目前为止,除了文件对话框之外,所有函数似乎都可以工作。到目前为止,我已经做到了这一点:

from tkinter import *
import tkinter
import tkinter.filedialog

class Window(Frame):                  
    #...
    #     other functional code
    #...

    def ChangeCWD(self):       #CWD is current working directory
        root = tkinter.Tk()
        root.withdraw()
        directory = filedialog.askdirectory( ... )

root = Tk()
root.mainloop()
但是,此代码会产生错误

NameError:未定义名称“filedialog”

当到达filedialog.askdirectory语句时。有谁能帮助我了解我应该如何纠正这种情况吗

作为旁白,请对我温柔一点!调用import语句的各种方式以及如何使用tk一直让我感到困惑。或者根。在一些函数调用之前。网络上有太多相互矛盾的解释,我看不清楚。

您使用import tkinter.filedialog,它使用名称空间tkinter.filedialog导入tkinter.filedialog,然后尝试在代码中使用filedialog

从以下两个选项中选择一个:

将调用更改为tkinter.filedialog.askdirectory。。。 将导入更改为从tkinter导入filedialog,这将使用命名空间filedialog导入tkinter.filedialog。
注意:从tkinter导入*可能看起来应该导入filedialog,但除非软件包明确指定子模块应该导入,否则它不会导入子模块。

您没有导入filedialog之类的东西,因此这不可能工作。您确实导入了tkinter.filedialog,所以请尝试一下,我手头没有Python 3安装来检查这是否正确。谢谢,您的解释帮了大忙。为了验证我的理解,我认为a from tkinter import*将导入所有类、函数、静态变量等,但不导入子模块,b tkinter.filedialog是一个子模块,对吗?是否有一个简单的参考资料来澄清tkinter的哪些功能实际上是子模块?org是如此之大,以至于它势不可挡。试着在下面的一行中查找列表,其他提供Tk支持的模块包括。这似乎列出了其中的大部分。不过,对于其中的大多数,似乎没有进一步的文档。