【问题标题】:How to open a Tkinter askopenfilename dialog compatible with Python 2 and Python 3如何打开与 Python 2 和 Python 3 兼容的 Tkinter askopenfilename 对话框
【发布时间】:2019-10-31 23:24:11
【问题描述】:

我正在尝试编写一个与 Python2.7 和 Python3.x 兼容的简单 Python Tkinter 文件选择器

Python3 版本

from tkinter import Tk
from tkinter.filedialog import askopenfilename

root = Tk()
root.withdraw()
filename = askopenfilename(title="Select file")
root.update()
root.destroy()

Python2.7版本

from Tkinter import Tk
from tkFileDialog import askopenfilename

root = Tk()
root.withdraw()
filename = askopenfilename(title="Select file")
root.update()
root.destroy()

我怎样才能想出一个统一的解决方案?

【问题讨论】:

  • 将一个版本的导入放在try 块中,将另一个版本的导入放在except 块中。
  • 谢谢@Guglie!这是我可以为askopenfile() 找到的罕见示例(尤其是在 Python 2 上)。你拯救了我的一天!

标签: python python-3.x python-2.7 tkinter


【解决方案1】:

首先尝试像 Python 3.x 一样导入 Tkaskopenfilename。如果你得到一个 ImportError(没有 tkintertkinter.filedialog 模块),尝试像 Python 2.x 一样导入它们。 (来自TkintertkFileDialog 模块)。
示例如下:

try:
    # Python 3.x
    from tkinter import Tk
    from tkinter.filedialog import askopenfilename
except ImportError:
    # Python 2.x
    from Tkinter import Tk
    from tkFileDialog import askopenfilename

root = Tk()
root.withdraw()
filename = askopenfilename(title="Select file")
root.update()
root.destroy()

【讨论】:

  • 为了完整起见,如果要导入的类/子模块/函数有不同的名称,您也可以使用from ... import ... as ...在代码中使用统一的名称。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-01
  • 1970-01-01
  • 2014-03-30
  • 1970-01-01
  • 1970-01-01
  • 2018-12-06
相关资源
最近更新 更多