Skip to main content
 首页 » 编程设计

python之MessageDialog 在 FileDialog ShowModal 后无响应

2025年05月04日10txw1958

大家好,我已经尝试调试这个问题一段时间了,但无济于事。

我已经定义了一个绑定(bind)到调用 FileDialog 的按钮的函数,如果用户单击“确定”,该函数将恢复。在 ID_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 .传递焦点似乎确实是一个问题,尽管它们都没有提供修复或解决方法。

请您参考如下方法:

尝试在“测试”对话框中使用“if”而不是“while”。我怀疑每当他们按下 OK 按钮时,你都会发生无限或接近无限循环的事情。如果用户在 dlgAdd 对话框中按下 CANCEL,您的程序将永远不会破坏 dlgAdd,因为它会在该点跳出循环。这也是一个问题,可能也是“测试”对话框挂起一段时间的原因。