Python 3.x 使用tkinter将Python 2.7转换为Python 3
我有一个使用Python 2.7和Tkinter的工作应用程序,它使用以下结构: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
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支持的模块包括。这似乎列出了其中的大部分。不过,对于其中的大多数,似乎没有进一步的文档。