2013-02-21 44 views
1

取消我有一個初始化按鈕時按下askopenfilename,但我希望能夠考慮到當用戶選擇取消對askopenfilename對話askopenfilename處理上,通過對話

這裏的GUI是我的函數來處理點擊按鈕,但if語句行似乎不起作用!

def openFileClicked(self): 
    self.filename=filedialog.askopenfilename() 
    if self.filename== None: 
     self.e.config(state= NORMAL) 
     self.e.delete(0,END) 
     self.e.insert(0,"...") 
     self.e.config(state="readonly") 
    self.e.config(state= NORMAL) 
    self.e.delete(0,END) 
    self.e.insert(0, self.filename) 
    self.e.config(state="readonly") 
    print ((self.filename)) 
+0

你做同樣的事情,無論是if語句內,用'self.e.insert'線之外的if語句之外。你遇到的問題究竟是什麼? (順便說一句,檢查'None'的規範方法是使用'None'而不是'== None'。在大多數情況下,它沒有太大的區別,但前者更可能是正確的(而且要快得多) – Iguananaut 2013-02-21 20:07:11

回答

2

.askopenfilename()在取消時返回一個空字符串,而不是無。所以你可以比較''False。爲了有一個代碼示例:

def openFileClicked(self): 
    self.filename = filedialog.askopenfilename() 
    if not self.filename: 
     # config...delete...etc. 
    # Rest of function 

至少我這樣做,你可能有你自己的喜好。

+0

是否可以通過askopenfilename或其他命令瀏覽遠程機器的文件 – Fahadkalis 2015-02-10 18:23:19

0

我知道這是幾年後,但我發現了一個怪癖,是相關的,無法找到任何信息。希望這些信息對任何遇到此問題的人都有用。

基本上如上所述,點擊取消將返回一個空字符串... 除非您實際選擇/高亮顯示一個文件,然後單擊取消。 這似乎返回一個空元組!!!

使用Python 2.6.6(IDK,問紅帽)
運行下面的代碼產生的後續結果

f_picked = tkFileDialog.askopenfilename() test = type(f_picked) print (test)
結果:
<type 'unicode'>#選擇任何內容,取消點擊
<type 'tuple'>#文件取消點擊
<type 'str'>#選定文件,確定點擊
<type 'tuple'>#多個文件選擇,OK點擊