【问题标题】:tkinter - how to open multiple filedialogs?tkinter - 如何打开多个文件对话框?
【发布时间】:2013-04-19 13:39:06
【问题描述】:

在 python 的默认编辑器 IDLE 中,可以同时打开多个“打开”对话框。

我正在查看他们的来源,但我找不到可以复制这种行为的地方。来自他们的IOBinding.py

from tkinter import filedialog as TkFileDialog
...

class IOBinding:
    ...
    def askopenfile(self):
        dir, base = self.defaultfilename("open")
        if not self.opendialog:
            self.opendialog = tkFileDialog.Open(master=self.text,
                                                filetypes=self.filetypes)
        filename = self.opendialog.show(initialdir=dir, initialfile=base)
        return filename

所以他们确实使用了 tkinter 的内置 filedialog 模块,但我找不到一些“无模式”对话框的方法。我可以通过两个代码打开对话框,它们基本相同:

from tkinter import filedialog as tkFileDialog

file_name = tkFileDialog.Open( ... ).show()
file_name = tkFileDialog.askopenfilename()

但它们会阻止整个应用程序 - 用户在关闭对话框之前无法切换窗口或发出新命令。另外,我不能从不同的线程调用这些对话框函数——这会杀死我的整个 Tk 应用程序。我该怎么办?

【问题讨论】:

    标签: python python-3.x tkinter tk


    【解决方案1】:

    filedialogparent 选项。您可以将其更改为隐藏窗口以防止阻塞根窗口:

    from tkinter import filedialog as tkFileDialog
    from tkinter import *
    
    def ask_open():
        p = hidden if attach_to_hidden.get() else root
        tkFileDialog.Open(parent=p).show()
    
    root = Tk()
    hidden = Toplevel()
    hidden.withdraw()
    
    attach_to_hidden = IntVar()
    Checkbutton(root, text='Attach to hidden window', variable=attach_to_hidden).pack()
    Button(root, text='Open', command=ask_open).pack()
    
    root.mainloop()
    

    【讨论】:

      猜你喜欢
      • 2012-03-03
      • 1970-01-01
      • 1970-01-01
      • 2014-07-13
      • 1970-01-01
      • 1970-01-01
      • 2023-04-03
      • 2010-12-11
      • 1970-01-01
      相关资源
      最近更新 更多