0

使用 wxpython,我用 wxpg.DirPropery 元素实例化一个 wxpg.PropertyGrid:

#http://wxpropgrid.sourceforge.net/cgi-bin/index
import wx.propgrid as wxpg

#...

    this_backup = wxpg.PropertyGrid(self._mainDisplay, wx.NewId(), 
                                    style = wxpg.PG_SPLITTER_AUTO_CENTER) 
    this_backup.Bind( wxpg.EVT_PG_CHANGED, self.OnBackupGridChange )

    this_backup.Append( wxpg.DirProperty("Backup Root",value=backup['Backup Root']))

在 Windows 下,当此代码运行并且我按下 dir 属性条目的“浏览”省略号时,我会看到一个对话框,允许我创建一个新目录作为选择。

但是,在 osx 10.8.2 下,似乎无法在同一个对话框中创建新目录。

我如何说服 osx 使用对话框来选择提供“新文件夹”作为选项之一的目录选择?

谢谢!

4

1 回答 1

1

它在 wxPython 演示中有效吗?查看演示代码,看起来它重写了 OnEvent 方法以显示 wx.DirDialog。如果这不起作用,那么 Mac 的本机对话框可能不允许该功能。

当然,由于您要覆盖事件,因此您可以使用您选择的任何对话框,因此您可以改用 MultiDirDialog (wx.lib.agw.multidirdialog)。这是一个纯 Python 小部件,所以它应该可以工作。

编辑(2012 年 10 月 15 日):

在我的 wxPython 2.9 Demo 中,我有以下事件处理程序:

def OnEvent(self, propgrid, primaryEditor, event):
    if event.GetEventType() == wx.wxEVT_COMMAND_BUTTON_CLICKED:
        dlg = wx.DirDialog(propgrid,
                           _("Select a directory to be added to "
                             "the list:"))

        if dlg.ShowModal() == wx.ID_OK:
            new_path = dlg.GetPath()
            old_value = self.m_value
            if old_value:
                new_value = list(old_value)
                new_value.append(new_path)
            else:
                new_value = [new_path]
            self.SetValueInEvent(new_value)
            retval = True
        else:
            retval = False

        dlg.Destroy()
        return retval

    return False

对我来说,这看起来像是演示创建者摆脱了 OnEvent 方法。

于 2012-09-28T17:37:17.580 回答