wx.DirDialog没有关闭

时间:2018-06-13 21:10:57

标签: python-3.x wxpython

使用带有python 3.6.5的wxPython版本4.0.1(pheonix)

我使用wxPython DirDialog来允许我的用户输入一个开始目录。它正确地选择并填充我的工作目录"变量(使用GetPath())但不会关闭目录对话框提示框。

我通读了wxPython用户的谷歌页面,我发现的唯一相关问题是将此作为"预期的行为,"暗示它会在执行后期发生(https://groups.google.com/forum/#!searchin/wxpython-users/close%7Csort:date/wxpython-users/ysEZK5PVBN4/ieLGEWc6AQAJ)。

然而,直到整个剧本完成运行(这花费了相当长的时间)之后,我并没有关闭,给了我死亡的旋转轮。我尝试了一系列调用来试图强制窗口关闭。

app = wx.App()
openFileDialog = wx.DirDialog(None, "Select", curr, wx.DD_DIR_MUST_EXIST)
openFileDialog.ShowModal()
working_directory = openFileDialog.GetPath()
openFileDialog.EndModal(wx.CANCEL) #also wx.Close(True) and wx.Destroy()
openFileDialog.Destroy()
openFileDialog=None

我还尝试创建一个窗口,将其作为DirDialog的父窗口传递,然后关闭窗口,它给出了相同的行为。

1 个答案:

答案 0 :(得分:1)

您没有提及您所使用的操作系统或wx的版本,但在您提供的部分代码中没有MainLoop,这是Robin Dunn在他的回答,在你的链接中。
试试这个,看看它是否按照你期望的方式工作。

import wx
from os.path import expanduser
import time

class choose(wx.Frame):
    def __init__(self, parent):
        wx.Frame.__init__(self, parent, -1, "Dialog")
        panel = wx.Panel(self,-1)
        text = wx.StaticText(panel,-1, "Place holder for chosen directory")
        self.Bind(wx.EVT_CLOSE, self.OnClose)
        self.Show()
        curr = expanduser("~")
        dlg = wx.DirDialog(None, message="Choose a directory", defaultPath = curr,
          style=wx.DD_DEFAULT_STYLE|wx.DD_DIR_MUST_EXIST)
        if dlg.ShowModal() == wx.ID_OK:
            text.SetLabel(dlg.GetPath())
        dlg.Destroy()
        b = wx.BusyInfo("I'm busy counting",parent=None)
        wx.Yield()
        for i in range(30):
            time.sleep(1)
        del b


    def OnClose(self, event):
        self.Destroy()

if __name__ == '__main__':
    my_app = wx.App()
    choose(None)
    my_app.MainLoop()