Python Unix下DirPickerCtrl的最大路径长度

Python Unix下DirPickerCtrl的最大路径长度,python,unix,wxpython,Python,Unix,Wxpython,我使用的是wxpython3.0.2.0、python2.7.13,我使用的是FreeBSD,所以我有一个Unix系统 我的问题是关于wx.dirpickertrl的 dir_picker_style = wx.DIRP_DIR_MUST_EXIST | wx.DIRP_USE_TEXTCTRL dir_picker = wx.DirPickerCtrl(self, wx.ID_ANY, path=path, message="test",

我使用的是wxpython3.0.2.0、python2.7.13,我使用的是FreeBSD,所以我有一个Unix系统

我的问题是关于wx.dirpickertrl的

dir_picker_style = wx.DIRP_DIR_MUST_EXIST | wx.DIRP_USE_TEXTCTRL
dir_picker = wx.DirPickerCtrl(self, wx.ID_ANY, path=path, message="test",
                              style=dir_picker_style)
如果我的路径超过32个字符(包括反斜杠),则

值是一个空字符串(u“”),我必须使用

dir_picker.GetChildren()[0].SetValue(dir_picker.Path)
一切正常。但是我的同事们使用Windows,对于他们来说,一个超过32个字符的路径也很好

有人知道这个错误吗?有人知道为什么会这样吗

谢谢你的时间


以下是一个可运行的示例:

#!/usr/bin/env python
import wx
class MyFrame(wx.Frame):
    def __init__(self, parent, title):
        wx.Frame.__init__(self, parent, title=title, size=(250,250))
        dir_picker_style = wx.DIRP_DIR_MUST_EXIST | wx.DIRP_USE_TEXTCTRL

        path1 = "more/than/"
        path2 = "more/than/thirtytwo/characters/more"

        dir_picker = wx.DirPickerCtrl(self, wx.ID_ANY,
                                      path=path1,
                                      style=dir_picker_style,
                                      pos=(100,50))

        statictext1 = wx.StaticText(self, label =
                                          "dir_picker.TextCtrl.Value: ",
                                          pos=(100,90))
        control1 = wx.TextCtrl(self, style=wx.TE_READONLY, pos=(100,130))
        control1.SetValue(dir_picker.TextCtrl.Value)
        control1.Enable(False)

        statictext2 = wx.StaticText(self, 
                                    label = "dir_picker.GetPath(): ",
                                    pos=(100,170))
        control2 = wx.TextCtrl(self, style=wx.TE_READONLY|wx.GROW,
                               pos=(100,200))
        control2.SetValue(dir_picker.GetPath())
        control2.Enable(False)

        self.Show(True)

app = wx.App(False)
frame = MyFrame(None, 'DirPicker')
app.MainLoop()

当我使用path1时,它将显示在每个textctrl中,但当我使用path2时,它仅显示在最后一个textctrl中。(但当我双击窗口时,path2也会出现在第一个文本Ctrl中。对我来说,这是一个非常奇怪的行为)。

我无法使用wxPython 3.0.2.0 Classic、Python 2.7和Xubuntu 16.04复制您的问题。当我尝试访问
TextCtrl.Value
时,我得到一个
AttributeError

我尝试改用文档化的API,它调用
GetPath()
,它可以很好地处理长文件夹名:

import wx

class MyPanel(wx.Panel):

    def __init__(self, parent):
        wx.Panel.__init__(self, parent)

        self.picker = wx.DirPickerCtrl(self)
        self.picker.Bind(wx.EVT_DIRPICKER_CHANGED, self.onPicked)

    def onPicked(self, event):
        print self.picker.GetPath()


class MyFrame(wx.Frame):

    def __init__(self):
        wx.Frame.__init__(self, None, title='Pickers')
        panel = MyPanel(self)
        self.Show()

if __name__ == '__main__':
    app = wx.App(False)
    frame = MyFrame()
    app.MainLoop()

谢谢你的评论。我又试了一次,但没有得到属性错误,只有1。value=dir\u path.GetPath(),即使使用长文件夹名2也可以正常工作。value=dir\u picker.TextCtrl.value,返回一个空字符串(u“”)3。value=dir\u picker.GetChildren()[0].GetValue(),也返回一个空字符串。我认为
dir\u picker.TextCtrl.value
是错误的方法。该API在文档中明确说明为
GetPath
。有趣的是,如果我将
wx.DIRP\u USE\u TEXTCTRL
添加到上面的示例中,那么
self.picker.TEXTCTRL.Value
对于长文件夹名很有效。谢谢您的时间。在我的GUI中,如果路径超过32个字符,则有一个不带条目的textctrl,因此我使用
dir\u picker.textctrl.Value
查看textctrl中的内容。这就是我的问题的原因:textctrl是空的,但是
dir\u path.GetPath()
确实有正确的值:这怎么可能发生?我想你必须发布一个小的、可运行的示例,我可以尝试,因为我无法复制这个问题。我刚刚添加了一个可运行的示例。谢谢你的时间!
import wx

class MyPanel(wx.Panel):

    def __init__(self, parent):
        wx.Panel.__init__(self, parent)

        self.picker = wx.DirPickerCtrl(self)
        self.picker.Bind(wx.EVT_DIRPICKER_CHANGED, self.onPicked)

    def onPicked(self, event):
        print self.picker.GetPath()


class MyFrame(wx.Frame):

    def __init__(self):
        wx.Frame.__init__(self, None, title='Pickers')
        panel = MyPanel(self)
        self.Show()

if __name__ == '__main__':
    app = wx.App(False)
    frame = MyFrame()
    app.MainLoop()