2013-04-19 2 views
1

в редакторе python по умолчанию, IDLE, возможно одновременное открытие нескольких открываемых диалогов.tkinter - как открыть несколько filedialogs?

Я ищу их источник, но я не могу найти, где я могу воспроизвести это поведение. от их 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. Что мне делать?

ответ

0

filedialog есть parent опция. Вы можете изменить его на скрытое окно, чтобы предотвратить блокировку корневого окна:

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() 
Смежные вопросы