2012-07-05 65 views
4

由於某種原因,默認的文件類型會根據我是打開帶菜單的文件對話框還是使用Ctrl + O熱鍵來更改。 爲什麼?tkFileDialog的askopenfilename方法中的默認文件類型

from Tkinter import * 
import tkFileDialog 

FILEOPENOPTIONS = dict(defaultextension='.bin', 
         filetypes=[('Bin file','*.bin'), ('All files','*.*')]) 

class TestGUI(Tk): 
    def __init__(self): 
     Tk.__init__(self) 
     self.title('Test') 
     menu = self.menubar = Menu(self) 
     fmenu = self.filemenu = Menu(menu, tearoff=0) 
     menu.add_cascade(label='File', underline=0, menu=fmenu) 
     fmenu.add_command(label="Open", underline=0, 
          accelerator='Ctrl+O', 
          command=self.fopendialog) 
     self.config(menu=menu) 
     self.bind_all('<Control-o>', self.fopendialog) 

    def fopendialog(self, event=None): 
     print repr(tkFileDialog.askopenfilename(parent=self, 
               **FILEOPENOPTIONS)) 

if __name__ == "__main__": 
    test = TestGUI() 
    test.mainloop() 
+0

你在什麼操作系統上?菜單以哪種方式更改? – gary 2012-07-07 10:50:06

+0

Windows 7中,默認選擇的文件類型會根據使用哪種方法打開文件對話框而發生更改。而已。在一種情況下,它將是「所有文件」,另一種是「Bin文件」 - 兩種格式都可以在下拉菜單中找到,這只是默認設置。 – Santiclause 2012-07-10 03:16:40

+0

嘗試不同版本的Python?這個論壇[post](http://python.6.n6.nabble.com/tkFileDialog-askopenfilenames-returns-unicode-string-instead-of-tuple-in-python-2-62-td1978109.html)指出Python 2.4和/或Python 2.6中的另一個bug tkFileDialog。你有沒有嘗試Python 2.7甚至3.2? – gary 2012-07-10 10:47:39

回答

3

我有這個相同的問題,但我通過將默認文件擴展名最後放在字典中來解決它。

像這樣:

FILEOPENOPTIONS = dict(defaultextension='.bin', 
        filetypes=[('All files','*.*'), ('Bin file','*.bin')]) 

參見參考上this page的例子。

+0

正如其他信息:這是沒有記錄的東西,所以它可能會根據操作系統/版本而改變。 http://effbot.org/tkinterbook/tkinter-file-dialogs.htm http://infohost.nmt.edu/tcc/help/pubs/tkinter/web/tkFileDialog.html – industryworker3595112 2017-07-31 09:39:53