Python show()重新打开旧的tkinter对话框

Python show()重新打开旧的tkinter对话框,python,macos,matplotlib,tkinter,filedialog,Python,Macos,Matplotlib,Tkinter,Filedialog,编辑:这似乎是一个仅限于Mac OS系统上的Tcl/Tk的问题。因此,如果您没有这方面的经验,此主题可能没有实际意义… 我想要一个Python脚本,它可以做两件事: 通过Tkinter文件对话框向用户询问文件名 从所述文件中绘制一些数据 问题是,matplotlib使用Tkinter进行图形表示,每当我在非交互模式下调用pyplot.show(),就会再次弹出(关闭前)文件对话框。在我看来,这就像是pyplot.show()。然而,我没有在这方面找到任何帮助。我尝试了Python2.7和3.3,

编辑:这似乎是一个仅限于Mac OS系统上的Tcl/Tk的问题。因此,如果您没有这方面的经验,此主题可能没有实际意义…

我想要一个Python脚本,它可以做两件事:

  • 通过Tkinter文件对话框向用户询问文件名
  • 从所述文件中绘制一些数据
  • 问题是,matplotlib使用Tkinter进行图形表示,每当我在非交互模式下调用
    pyplot.show()
    ,就会再次弹出(关闭前)文件对话框。在我看来,这就像是
    pyplot.show()。然而,我没有在这方面找到任何帮助。我尝试了Python2.7和3.3,因为Tkinter模块的很多地方似乎都发生了变化,但这是相同的现象。我想到的一个稍微奇怪的解决方法是进入matplotlib交互模式,然后使用
    raw\u input()
    命令保持窗口打开

    下面是一个在Python 2和Python 3中工作的最小代码片段,以说明问题:

    导入matplotlib.pyplot作为plt
    #导入Tkinter GUI(从Python 2.x更改为3.x)
    尝试:
    进口Tkinter
    除(恐怖)外:
    将tkinter作为tkinter导入
    尝试:
    从tkFileDialog导入askopenfilename
    除(恐怖)外:
    从tkinter.filedialog导入askopenfilename
    root=Tkinter.Tk()
    root.draw()
    输入\ u filename=askopenfilename(master=root)
    #这似乎很有希望,但没有帮助
    root.destroy()
    plt.图()
    #取消注释以切换到交互模式是一种解决方法
    #plt.ion()
    plt.show()
    #Python 2.x和3.x兼容等待输入:
    try:input=原始输入
    除了名称错误:通过
    #等待击键(用于交互模式)
    输入(“完成后按enter…”)
    
    很抱歉,如果我在这里遗漏了一些明显的东西,我对Python不是很精通,并且我没有找到关于这个问题的令人满意的信息。但我的直觉告诉我,必须有一个简单而优雅的解决方案

    系统信息(我尝试过的最新版本):

    • Python 3.3(来自MacPorts)
    • matplotlib 1.3.x(从github master构建)
    • Mac OS X 10.8.3
    • Tcl/Tk 8.6.0(来自MacPorts)
    谢谢


    Floh

    matplotlib上不为我复制。\uuuuu版本\uuuu==“1.3.x”
    。。。如果您使用的是旧版本,请尝试更新?抱歉,我忘了提及(因为这可能很重要,尤其是在使用Tkinter时):我主要是在Mac OS 10.8.3上使用MacPorts预先构建的matplotlib 1.2.0尝试过这一点。我将尝试在我的Linux机器上运行它。那么我将尝试更新matplotlib。不过,我必须手动编译它并更新所有Python模块依赖项,因此可能需要一段时间。谢谢,嗯。matplotlib甚至还没有正式的“1.3.x”版本标签。我现在正在克隆github主分支,但我不确定这是一条路。是的,这就是我安装它的方式。不,对不起。在使用Tk 8.6.0的MacOSX上,Python 3.3和matplotlib 1.3.x仍然存在问题。我会把版本信息放到原来的帖子里,谢谢提醒。