4

我开始学习 wxPython 来创建 GUI 应用程序,但我遇到了一些问题:当使用 wx.DirDialog 选择某个文件夹时,无论我选择什么文件夹,dlg.GetPath() 总是返回相同的文件夹,即就我而言:/home/loai

我的绑定功能如下,很简单:

def onButton(self,e):
    dlg = wx.DirDialog(self, "Choose a directory:")
    if dlg.ShowModal() == wx.ID_OK:
        print "You chose %s" % dlg.GetPath()
    dlg.Destroy()

这总是打印:你选择了 /home/loai

谢谢

4

4 回答 4

6

您使用的是什么操作系统?哪个蟒蛇?哪个wxPython?这看起来很像我的一个教程中的代码,对我来说效果很好。我继续并实际上从该教程中编写了一个精简的可运行示例:

import os
import wx


########################################################################
class MyForm(wx.Frame):

    #----------------------------------------------------------------------
    def __init__(self):
        wx.Frame.__init__(self, None, wx.ID_ANY,
                          "File and Folder Dialogs Tutorial")
        panel = wx.Panel(self, wx.ID_ANY)
        self.currentDirectory = os.getcwd()

        dirDlgBtn = wx.Button(panel, label="Show DirDialog")
        dirDlgBtn.Bind(wx.EVT_BUTTON, self.onDir)

    #----------------------------------------------------------------------
    def onDir(self, event):
        """
        Show the DirDialog and print the user's choice to stdout
        """
        dlg = wx.DirDialog(self, "Choose a directory:",
                           style=wx.DD_DEFAULT_STYLE
                           #| wx.DD_DIR_MUST_EXIST
                           #| wx.DD_CHANGE_DIR
                           )
        if dlg.ShowModal() == wx.ID_OK:
            print "You chose %s" % dlg.GetPath()
        dlg.Destroy()

#----------------------------------------------------------------------
# Run the program
if __name__ == "__main__":
    app = wx.App(False)
    frame = MyForm()
    frame.Show()
    app.MainLoop()

我使用 Python 2.6.6 和 wxPython 2.8.12.1 在 Windows 7 上运行此代码。我选择了三个不同的目录,它打印了所有 3 个不同的路径。

于 2012-12-19T19:38:08.040 回答
3

我自己的代码和上面发布的代码也有同样的问题。但是,我发现有办法绕过它。当您使用 DirDialog 时,实际上不要导航到您要打开的目录。相反,只需突出显示要打开的目录并单击打开。

在带有 Python 2.7.3 和 wxPython 2.8.12.1(以及 2.9)的 Ubuntu 12.10 上,一直导航到一个目录并单击打开按钮只会给您您的主目录。向上导航一个目录,突出显示所需的目录,然后单击打开按钮会给出正确的结果。

我有另一台机器运行 ubuntu 11.10 和 Python 2.7.3,我不记得有这个问题。

显然,这种解决方法不是一个合适的解决方案,但这是我迄今为止所能想到的。我希望它有所帮助。

于 2012-12-28T10:27:10.230 回答
0

大多数操作系统中的目录对话框使用起来很笨拙。在单击“确定”之前,您必须查看底部的那个小文本框并确保它已正确填充。我有很多用户对此有疑问。因此,也许您正在导航到您想要的文件夹,但您并没有通过单击组合来将您的选择放入文本框中。这可能不是你的问题,但我想我会提到它。否则,您的代码对我来说看起来不错。

祝你好运,

麦克风

于 2012-12-19T19:45:07.877 回答
0

试试这个:

dialog = wx.DirDialog(None, "导航到所需版本的桌面目录。", "~/", 0, (10, 10), wx.Size(400, 300)) dialog.CentreOnParent()

    # Update directory with path selected in dialog
    if dialog.ShowModal() == wx.ID_OK:
        self.dir_path = dialog.GetPath()
        self.updateDirectory()

它对我有用:D

于 2013-04-23T14:41:32.287 回答