wxPython导航面板(如Finder(Mac OS X),Nautilus(Ubuntu),Explorer(Windows 7))

时间:2011-10-30 06:02:09

标签: python navigation wxpython

我的问题很简单,如何制作类似的导航面板 Finder(Mac OS X)

Finder

资源管理器(Windows 7) Windows Explorer

Nautilus(Ubuntu)

Nautilus

至于使用不起作用的wx.TreeCtrl ......

实施例

http://paste.pocoo.org/show/500311/

正如你所看到的,第一个问题是左侧有一个巨大的粉红色条带,你无法将其删除,仅次于root,否则你必须为隐藏缓冲区添加更多的缓冲区,第二个kludgy,第三个不是真正的三个例子中的任何一个看起来像。

那么我怎么能得到一个类似于上面例子的导航面板(除了树ctrl例子:p)

====更新=====

在Windows(至少Windows 7)上,没有左侧有白柱的问题

可能在Linux和MacOS X上的树ctrl小部件通常被绘制...如果有人可以在MacOS X上运行上面的示例并查看是否有粉红色列(粉红色,因为该示例将其设置为背景颜色)在树ctrl的左边。

====更新2 ===== iTunes就是一个例子 Navigation Bar Example

似乎有一点误会,问题不是我正在寻找的文件管理器文件夹视图,而是导航面板方面。

例如iTunes也有这个,但它不是文件管理器,它们都在左侧,有一堆可点击的“标签”用于导航(例如在iTunes中有音乐,电影,电视节目,有声读物,应用程序都在图书馆之下)

另外问题是树ctrl在Linux上不起作用(见下图) enter image description here

3 个答案:

答案 0 :(得分:1)

尝试使用Treebook

<强>更新

或者,尝试使用wx.lib.agw.foldpanelbar做一些事情。在演示套件中查看它的演示,取决于您实际需要它可能就足够了。如果没有,你可以随时自己制作。

答案 1 :(得分:1)

如果您真的在寻找浏览目录结构:

import os
import wx

class MainWindow(wx.Frame):
    def __init__(self, *args, **kwargs):
        wx.Frame.__init__(self, *args, **kwargs)

        self.panel = wx.Panel(self)
        self.dir = wx.GenericDirCtrl(self.panel, size=(200, -1), style=wx.DIRCTRL_DIR_ONLY)
        self.files = wx.ListCtrl(self.panel, style=wx.LC_LIST)

        self.sizer = wx.BoxSizer()
        self.sizer.Add(self.dir, flag=wx.EXPAND)
        self.sizer.Add(self.files, proportion=1, flag=wx.EXPAND)

        self.border = wx.BoxSizer()
        self.border.Add(self.sizer, 1, wx.ALL | wx.EXPAND, 5)

        self.panel.SetSizerAndFit(self.border)  
        self.Show()

        self.dir.Bind(wx.EVT_TREE_SEL_CHANGED, self.OnSelect)


    def OnSelect(self, e):
        self.files.ClearAll()
        list = os.listdir(self.dir.GetPath())
        for a in reversed(list):
            self.files.InsertStringItem(0, a)


app = wx.App(False)
win = MainWindow(None, size=(600, 400))
app.MainLoop()

这里有一些有用的例子:

如果你想要类似的小部件,请查看wx.lib.agw.customtreectrl。它可能不是你想要的100%,但是wxpython中有这个小部件的来源,所以你可以修改它以满足你的需要。

import wx
import wx.lib.agw.customtreectrl as CT

class MainWindow(wx.Frame):
    def __init__(self, *args, **kwargs):
        wx.Frame.__init__(self, *args, **kwargs)

        self.panel = wx.Panel(self)
        self.dir = CT.CustomTreeCtrl(self.panel, size=(100, -1), 
                                     style=wx.SUNKEN_BORDER,
                                     agwStyle=CT.TR_FULL_ROW_HIGHLIGHT | CT.TR_HIDE_ROOT | CT.TR_NO_LINES | CT.TR_ROW_LINES)           

        root = self.dir.AddRoot("The Root Item")
        child = self.dir.AppendItem(root, "Test")
        child = self.dir.AppendItem(child, "Test 2")
        child = self.dir.AppendItem(child, "Test 3")
        child = self.dir.AppendItem(root, "Test 4")

        self.dir.ExpandAll()

        self.sizer = wx.BoxSizer()
        self.sizer.Add(self.dir, proportion=1, flag=wx.EXPAND)

        self.border = wx.BoxSizer()
        self.border.Add(self.sizer, 1, wx.ALL | wx.EXPAND, 5)

        self.panel.SetSizerAndFit(self.border)  
        self.Show()


app = wx.App(False)
win = MainWindow(None, size=(200, 300))
app.MainLoop()

答案 2 :(得分:1)

应用了TR_TWIST_BUTTON样式的HyperTreeList控件怎么样?这将使它看起来更像Apple发现者。它也是纯Python,比普通的TreeCtrl更容易破解自己。如果您需要Windows资源管理器外观,您可能需要查看ListCtrl,ObjectListView或UltimateListCtrl。在wxPython演示中有所有这些演示(除了ObjectListView,因为它不包含在wxPython中)。