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

4

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

Finder

资源管理器 (Windows 7) Windows Explorer

Nautilus (Ubuntu)

Nautilus

关于使用不起作用的wx.TreeCtrl......
示例

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

正如您所见,第一个问题是左侧有一个巨大的粉色条纹,无法移除,第二个问题只能在根目录上使用,否则必须为隐藏缓冲区放置更多的缓冲区,第二个笨拙,第三个实际上不像任何一个例子看起来那样。
那么我该如何获得类似于上面的导航面板(好吧,除了树形控件示例:p)?
==== 更新 =====
在Windows上(至少是Windows 7),左侧没有白色列的问题
可能在Linux和MacOS X上,树形控件小部件是通用绘制的...如果有人可以在MacOS X上运行上面的示例并查看树形控件左侧是否有粉红色列(因为该示例将其设置为背景颜色)。
==== 更新2 ===== iTunes作为示例 Navigation Bar Example 似乎对于问题有一点误解,我要找的不是文件管理器文件夹视图,而是导航面板。
例如,iTunes也有这个功能,但它不是一个文件管理器。它们共同的特点是左侧有一堆可点击的“选项卡”,用于导航(例如在iTunes中,音乐、电影、电视节目、有声读物、应用程序都在库中)。
此外,问题在于树形控件在Linux上不起作用(见下图)。
3个回答

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。这可能不完全符合你的需要,但是在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()

1

尝试使用 Treebook

更新:

或者,尝试使用wx.lib.agw.foldpanelbar。可以在演示套件中查看其演示,根据您实际需要,它可能已足够。如果不行,您始终可以从头开始创建自己的折叠面板。


导航部分使用树形控件,因此仍然存在树形控件和左侧空白像素的相同问题。 - Zimm3r
没有真正的答案,但你的回答给了我一些想法,可惜都没有回答问题。嗯,算了吧... - Zimm3r

1
HyperTreeList控件应用TR_TWIST_BUTTON样式如何?这会使它看起来更像苹果查找器。它也是纯Python,比普通的TreeCtrl更容易自己修改。如果你需要Windows资源管理器的外观,你可能想看一下ListCtrl、ObjectListView或UltimateListCtrl。在wxPython演示中,所有这些都有演示(除了ObjectListView,因为它没有包含在wxPython中)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接