2012-05-02 38 views
2

嘿傢伙我一直在試圖調試這個問題一段時間無濟於事。FileDialog ShowModal後MessageDialog無響應

我已經定義了一個函數綁定到一個調用FileDialog的按鈕,如果用戶單擊確定,函數將恢復。在ID_OK後立即嘗試調用一個簡單的對話框,提示用戶從另一個目錄中選擇文件。此消息對話框出現後,立即出現延遲,用戶無法在第一次單擊時按OK或取消。需要重複點擊按鈕才能響應。如果有人知道這裏發生了什麼,或者可以做些什麼來調試這個問題,我將非常感謝:)。我已經附加了代碼片段(儘管使用SingleChoiceDialog,但行爲與MessageDialog相同)。對於記錄dlg在條件語句之後被銷燬。

def openFile(self, event): 
    import os 
    import re 
    import csv 
    import sets 
    import datetime 

    dlg = wx.FileDialog(self, "Choose file(s)", os.getcwd(), "", "*.*", wx.OPEN | wx.MULTIPLE | wx.CHANGE_DIR) 

    if dlg.ShowModal() == wx.ID_OK: 
     path = dlg.GetPaths() 

     test = wx.SingleChoiceDialog(self, 'Add more files from different directories?', 'Selected Files', path, style=wx.CHOICEDLG_STYLE) 

     while test.ShowModal() == wx.ID_OK: 
      dlgAdd = wx.FileDialog(self, "Choose file(s)", os.getcwd(), "", "*.*", wx.OPEN | wx.MULTIPLE | wx.CHANGE_DIR) 
      if dlgAdd.ShowModal() == wx.ID_CANCEL: 
       break 
      dlgAdd.Destroy() 
      path = path + dlgAdd.GetPaths() 
      test = wx.SingleChoiceDialog(self, 'Add more files from different directories?', 'Selected Files', path, style=wx.CHOICEDLG_STYLE) 

     test.Destroy() 

在網上搜索了更多,發現類似問題的報告:http://comments.gmane.org/gmane.comp.python.wxpython/55470。它似乎是一個傳遞焦點的問題,但是他們都沒有提供修復或解決方法。

回答

0

嘗試在「測試」對話框中使用「if」而不是「while」。我懷疑你有一個無限或接近無限循環的事情,只要他們按下OK按鈕。如果用戶在dlgAdd對話框上按下CANCEL,程序就不會銷燬dlgAdd,因爲它在該點處脫離循環。這也是一個問題,也可能是爲什麼「測試」對話框掛了一段時間。

+0

嗯,即使我完全刪除while循環,只需添加如果dlgAdd.ShowModal()== wx.ID_OK:啓動函數(授予此簡化不是所需的功能),問題仍然存在。 –

+0

無反應可能不是實際描述問題的最佳詞彙。有趣的是,我可以在彈出對話框後等待1秒或10秒,然後第一次點擊OK或CANCEL按鈕,調整大小,移動,ETC等都會失敗。這好像是焦點問題,因爲彈出對話框後可以觸摸對話框的任何部分,然後OK和CANCEL按鈕立即工作。 –

0

呃沒關係,因爲使用Parallels時使用Coherence模式導致錯誤。關閉此對話框後,完美工作。