Дерево списка wxglade не отображается должным образом - PullRequest
1 голос
/ 05 апреля 2019

Я новичок в wxglade и пытаюсь создать форму для отображения вкладок и разделенного окна.На левой панели будут списки деревьев.Проблема в том, что когда я открываю форму, она отображает древовидный список, но список не может быть свернут или расширен.Когда я перехожу на вторую вкладку и возвращаюсь к первой, список деревьев отображается в маленьком окошке.

import wx

# Define the tab content as classes:
class TabOne(wx.Panel):
    def __init__(self, parent):
        wx.Panel.__init__(self, parent)



        self.SetSize((400, 300))
        self.window_1 = wx.SplitterWindow(self, wx.ID_ANY)
        self.window_1_pane_1 = wx.ScrolledWindow(self.window_1, wx.ID_ANY, style=wx.BORDER_RAISED | wx.TAB_TRAVERSAL)
        #self.button_1 = wx.Button(self.window_1_pane_1, wx.ID_ANY, "button_1")

        #t = wx.StaticText(self, -1, "This is the first tab", (100,100)) start list
        il = wx.ImageList(16,16)

        self.fldridx = il.Add(wx.ArtProvider.GetBitmap(wx.ART_FOLDER, wx.ART_OTHER, (16,16)))
        self.fldropenidx = il.Add(wx.ArtProvider.GetBitmap(wx.ART_FILE_OPEN,   wx.ART_OTHER, (16,16)))
        self.fileidx = il.Add(wx.ArtProvider.GetBitmap(wx.ART_NORMAL_FILE, wx.ART_OTHER, (16,16)))

        self.tree = wx.TreeCtrl(self, style=wx.TR_DEFAULT_STYLE | wx.TR_EDIT_LABELS)

        self.tree.AssignImageList(il)

        root = self.tree.AddRoot("Server")
        self.tree.SetItemData(root, None)
        self.tree.SetItemImage(root, self.fldridx,wx.TreeItemIcon_Normal)
        self.tree.SetItemImage(root, self.fldropenidx,wx.TreeItemIcon_Expanded)

        tree = ["A","B","C","D","E","F","G","H"]

        self.AddTreeNodes(root, tree)

        self.tree.Expand(root)



    def AddTreeNodes(self, parentItem, items):
        for item in items:
            if type(item) == str:
                newItem = self.tree.AppendItem(parentItem, item)
                self.tree.SetItemData(newItem, None)
                #self.tree.SetItemImage(newItem, self.fileidx,wx.TreeItemIcon_Normal)
            else:
                newItem = self.tree.AppendItem(parentItem, item[0])
                self.tree.SetItemPyData(newItem, None)
                #self.tree.SetItemImage(newItem, self.fldridx,wx.TreeItemIcon_Normal)
                self.tree.SetItemImage(newItem, self.fldropenidx,wx.TreeItemIcon_Expanded)

                self.AddTreeNodes(newItem, item[1])



#end list

        self.window_1_pane_2 = wx.Panel(self.window_1, wx.ID_ANY)

        self.window_1_pane_1.SetMinSize((50, 256))
        self.window_1_pane_1.SetBackgroundColour(wx.Colour(216, 216, 191))
        self.window_1_pane_1.SetScrollRate(10, 10)
        self.window_1.SetMinimumPaneSize(20)

        sizer_1 = wx.BoxSizer(wx.VERTICAL)
        sizer_2 = wx.BoxSizer(wx.HORIZONTAL)
        #sizer_2.Add(self.button_1, 0, 0, 0)
        sizer1 = wx.BoxSizer(wx.VERTICAL)
        sizer1.Add(self.tree, 20, wx.EXPAND)
        self.SetSizer(sizer1)

        self.window_1_pane_1.SetSizer(sizer_2)
        self.window_1.SplitVertically(self.window_1_pane_1, self.window_1_pane_2)
        sizer_1.Add(self.window_1, 1, wx.EXPAND, 0)
        self.SetSizer(sizer_1)



class TabTwo(wx.Panel):
    def __init__(self, parent):
        wx.Panel.__init__(self, parent)
        t = wx.StaticText(self, -1, "This is the second tab", (20,20))

class TabThree(wx.Panel):
    def __init__(self, parent):
        wx.Panel.__init__(self, parent)
        t = wx.StaticText(self, -1, "This is the third tab", (20,20))

class TabFour(wx.Panel):
    def __init__(self, parent):
        wx.Panel.__init__(self, parent)
        t = wx.StaticText(self, -1, "This is the last tab", (20,20))


class MainFrame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, title="wxPython tabs example @pythonspot.com")

        # Create a panel and notebook (tabs holder)
        p = wx.Panel(self)
        nb = wx.Notebook(p)

        # Create the tab windows
        tab1 = TabOne(nb)
        tab2 = TabTwo(nb)
        tab3 = TabThree(nb)
        tab4 = TabFour(nb)

        # Add the windows to tabs and name them.
        nb.AddPage(tab1, "Tab 1")
        nb.AddPage(tab2, "Tab 2")
        nb.AddPage(tab3, "Tab 3")
        nb.AddPage(tab4, "Tab 4")

        # Set noteboook in a sizer to create the layout
        sizer = wx.BoxSizer()
        sizer.Add(nb, 1, wx.EXPAND)
        p.SetSizer(sizer)





if __name__ == "__main__":
    app = wx.App(redirect=True)
    MainFrame().Show()
    app.MainLoop()

1 Ответ

0 голосов
/ 05 апреля 2019

wx.TreeCtrl имеет встроенные горизонтальные и вертикальные полосы прокрутки. Поэтому, я думаю, здесь нет необходимости использовать wx.ScrolledWindow. Я упрощаю код для class TabOne до следующего:

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

        self.SetSize((400, 300))
        self.window_1 = wx.SplitterWindow(self, wx.ID_ANY)


        il = wx.ImageList(16,16)
        self.fldridx = il.Add(wx.ArtProvider.GetBitmap(wx.ART_FOLDER, wx.ART_OTHER, (16,16)))
        self.fldropenidx = il.Add(wx.ArtProvider.GetBitmap(wx.ART_FILE_OPEN,   wx.ART_OTHER, (16,16)))
        self.fileidx = il.Add(wx.ArtProvider.GetBitmap(wx.ART_NORMAL_FILE, wx.ART_OTHER, (16,16)))

        self.tree = wx.TreeCtrl(self.window_1, style=wx.TR_DEFAULT_STYLE | wx.TR_EDIT_LABELS)
        self.tree.AssignImageList(il)
        root = self.tree.AddRoot("Server")
        self.tree.SetItemData(root, None)
        self.tree.SetItemImage(root, self.fldridx,wx.TreeItemIcon_Normal)
        self.tree.SetItemImage(root, self.fldropenidx,wx.TreeItemIcon_Expanded)
        tree = ["A","B","C","D","E","F","G","H"]
        self.AddTreeNodes(root, tree)
        self.tree.Expand(root)

        self.window_1_pane_2 = wx.Panel(self.window_1, wx.ID_ANY)

        self.window_1.SetMinimumPaneSize(20)

        self.window_1.SplitVertically(self.tree, self.window_1_pane_2)
        sizer_1 = wx.BoxSizer(wx.HORIZONTAL)
        sizer_1.Add(self.window_1, 1, wx.EXPAND, 0)
        self.SetSizer(sizer_1)

    def AddTreeNodes(self, parentItem, items):
        for item in items:
            if type(item) == str:
                newItem = self.tree.AppendItem(parentItem, item)
                self.tree.SetItemData(newItem, None)
                #self.tree.SetItemImage(newItem, self.fileidx,wx.TreeItemIcon_Normal)
            else:
                newItem = self.tree.AppendItem(parentItem, item[0])
                self.tree.SetItemPyData(newItem, None)
                #self.tree.SetItemImage(newItem, self.fldridx,wx.TreeItemIcon_Normal)
                self.tree.SetItemImage(newItem, self.fldropenidx,wx.TreeItemIcon_Expanded)

                self.AddTreeNodes(newItem, item[1])

и теперь работает как положено.

...