我开始学习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
感谢
答案 0 :(得分:6)
您使用的操作系统是什么?哪个Python?哪个wxPython?这看起来很像我的tutorials之一的代码,对我来说效果很好。我继续前进,实际上从该教程中编写了一个精简的可运行示例:
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()
我在Windows 7上使用Python 2.6.6和wxPython 2.8.12.1运行此代码。我选择了三个不同的目录,它打印了所有3种不同的路径。
答案 1 :(得分:3)
我的代码和上面发布的代码遇到了同样的问题。但是,我发现有一种解决方法。使用DirDialog时,实际上不要导航到要打开的目录。相反,只需突出显示要打开的目录,然后单击“打开”。
在Ubuntu 12.10上,使用Python 2.7.3和wxPython 2.8.12.1(以及2.9),一直导航到一个目录,然后单击打开按钮,就会显示主目录。向上导航一个目录,突出显示所需目录,然后单击打开按钮可得到正确的结果。
我有另一台机器运行ubuntu 11.10和Python 2.7.3,我不记得有这个问题。
显然,这种解决方案不是一个合适的解决方案,但到目前为止我已经能够提出这一切。我希望它有所帮助。答案 2 :(得分:0)
大多数操作系统中的dir对话框使用起来很笨拙。你必须在底部观看那个小文本框,并确保在单击OK之前正确填充它。我有很多用户遇到这个问题。因此,您可能正在导航到所需的文件夹,但是您没有进行单击组合以将您的选择放入文本框中。这可能不是你的问题,但我想我会提到它。否则,你的代码看起来很好。
祝你好运,麦克
答案 3 :(得分:0)
dialog = wx.DirDialog(无,“导航到您需要的版本的桌面目录。”, “〜/”,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