Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
wxpython-嵌套笔记本_Wxpython - Fatal编程技术网

wxpython-嵌套笔记本

wxpython-嵌套笔记本,wxpython,Wxpython,我一直在努力使我的嵌套笔记本在代码方面更具吸引力。此刻,我得到了这个 #!/usr/bin/env python import os import sys import datetime import numpy as np from readmonifile import MonitorFile from sortmonifile import sort import wx class NestedPanelOne(wx.Panel): #----------------------

我一直在努力使我的嵌套笔记本在代码方面更具吸引力。此刻,我得到了这个

#!/usr/bin/env python
import os
import sys
import datetime
import numpy as np
from readmonifile import MonitorFile
from sortmonifile import sort
import wx

class NestedPanelOne(wx.Panel):
    #----------------------------------------------------------------------
    # First notebook that creates the tab to select the component number
    #----------------------------------------------------------------------
    def __init__(self, parent, label, data):

        wx.Panel.__init__(self, parent=parent, id=wx.ID_ANY)

        sizer = wx.BoxSizer(wx.VERTICAL)

        #Loop creating the tabs according to the component name
        nestedNotebook = wx.Notebook(self, wx.ID_ANY)
        for slabel in sorted(data[label].keys()):
            tab = NestedPanelTwo(nestedNotebook, label, slabel, data)
            nestedNotebook.AddPage(tab,slabel)


        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(nestedNotebook, 1, wx.ALL|wx.EXPAND, 5)

        self.SetSizer(sizer)

class NestedPanelTwo(wx.Panel):
    #------------------------------------------------------------------------------
    # Second notebook that creates the tab to select the main monitoring variables 
    #------------------------------------------------------------------------------
    def __init__(self, parent, label, slabel, data):

        wx.Panel.__init__(self, parent=parent, id=wx.ID_ANY)

        sizer = wx.BoxSizer(wx.VERTICAL)

        nestedNotebook = wx.Notebook(self, wx.ID_ANY)

        for sslabel in sorted(data[label][slabel][data[label][slabel].keys()[0]].keys()):
            tab = NestedPanelThree(nestedNotebook, label, slabel, sslabel, data)
            nestedNotebook.AddPage(tab, sslabel)

        sizer.Add(nestedNotebook, 1, wx.ALL|wx.EXPAND, 5)
        self.SetSizer(sizer)

class NestedPanelThree(wx.Panel):
    #-------------------------------------------------------------------------------
    # Third notebook that creates checkboxes to select the monitoring sub-variables
    #-------------------------------------------------------------------------------
    def __init__(self, parent, label, slabel, sslabel, data):

        wx.Panel.__init__(self, parent=parent, id=wx.ID_ANY)

        labels=[]
        chbox =[]
        chboxdict={}
        for ssslabel in sorted(data[label][slabel][data[label][slabel].keys()[0]][sslabel].keys()):
            labels.append(ssslabel)

        for item in list(set(labels)):
            cb = wx.CheckBox(self, -1, item)
            chbox.append(cb)
            chboxdict[item]=cb

        gridSizer = wx.GridSizer(np.shape(list(set(labels)))[0],3, 5, 5)

        gridSizer.AddMany(chbox)
        self.SetSizer(gridSizer)

########################################################################
class NestedNotebookDemo(wx.Notebook):
    #---------------------------------------------------------------------------------
    # Main notebook creating tabs for the monitored components
    #---------------------------------------------------------------------------------
    def __init__(self, parent, data):
        wx.Notebook.__init__(self, parent, id=wx.ID_ANY, style=
                             wx.BK_DEFAULT
                            )

        for label in sorted(data.keys()):
            print label
            tab = NestedPanelOne(self,label, data)
            self.AddPage(tab, label)
########################################################################
class DemoFrame(wx.Frame):
    #----------------------------------------------------------------------
    # Putting it all together
    #----------------------------------------------------------------------
    def __init__(self,data):

        wx.Frame.__init__(self, None, wx.ID_ANY,
                          "pDAQ monitoring plotting tool",
                          size=(800,400)
                          )

        panel = wx.Panel(self)

        notebook = NestedNotebookDemo(panel, data)
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(notebook, 1, wx.ALL|wx.EXPAND, 5)
        panel.SetSizer(sizer)
        self.Layout()

        #Menu Bar to be added later
        '''
        menubar = wx.MenuBar()
        file = wx.Menu()
        file.Append(1, '&Quit', 'Exit Tool')
        menubar.Append(file, '&File')
        self.SetMenuBar(menubar)
        self.Bind(wx.EVT_MENU, self.OnClose, id=1)
        '''
        self.Show()
#----------------------------------------------------------------------
if __name__ == "__main__":

    if len(sys.argv) == 1:
        raise SystemExit("Please specify a file to process")

    for f in sys.argv[1:]:
        data=sort.sorting(f)
        print data['stringHub'].keys()
        print data.keys()
        print data[data.keys()[0]].keys()

    print 'test'
    app = wx.PySimpleApp()
    frame = DemoFrame(data)
    app.MainLoop()
    print 'testend'
我想把整个混乱简化为只有三个嵌套for循环的东西

for label in sorted(data.keys()):
            self.SubNoteBooks[label] = wx.Notebook(self.Notebook, wx.ID_ANY)
            self.Notebook.AddPage(self.SubNoteBooks[label], label)
            for slabel in sorted(data[label].keys()):
                self.SubNoteBooks[label][slabel] = wx.Notebook(self, wx.ID_ANY)
                self.SubNoteBooks[label].AddPage(self.SubNoteBooks[label][slabel], slabel)
                for sslabel in sorted(data[label][slabel][data[label][slabel].keys()[0]].keys()):
                    self.SubNoteBooks[label][slabel][sslabel] = wx.Notebook(self.Notebook, wx.ID_ANY)
                    self.Notebook.AddPage(self.SubNoteBooks[label][slabel][sslabel], sslabel)
我一直在试图摆弄这件事,但问题似乎出在线路上

self.SubNoteBooks[label][slabel] = wx.Notebook(self, wx.ID_ANY)
我得到一个错误:

Traceback (most recent call last):
  File "./reducelinenumbers.py", line 162, in <module>
    frame = DemoFrame(data)
  File "./reducelinenumbers.py", line 126, in __init__
    self.SubNoteBooks[label][slabel] = wx.Notebook(self, wx.ID_ANY)
TypeError: 'Notebook' object does not support item assignment
回溯(最近一次呼叫最后一次):
文件“/reducelinenumbers.py”,第162行,在
frame=DemoFrame(数据)
文件“/reducelinenumbers.py”,第126行,在_init中__
self.SubNoteBooks[label][slabel]=wx.Notebook(self,wx.ID\u ANY)
TypeError:“笔记本”对象不支持项目分配
我理解为什么笔记本正在打印会在这里引发一个类型错误。有办法解决这个问题吗


提前多谢。

你使用的笔记本就像字典一样,所以它不起作用。
你可以做:

from collections import defaultdict

self.sub_nbks = defaultdict(lambda:defauldict(dict))

for label in sorted(data.keys()):
    self.sub_nbks[label]['top']['top'] = wx.Notebook(self.Notebook, wx.ID_ANY)
    self.Notebook.AddPage(self.sub_nbks[label]['top']['top'], label)
    for slabel in sorted(data[label].keys()):
        self.sub_nbks[label][slabel]['top'] = wx.Notebook(self.Notebook, wx.ID_ANY)
        self.sub_nbks[label]['top']['top'].AddPage(self.sub_nbks[label][slabel]['top'], slabel)
        for sslabel in sorted(data[label][slabel].keys()):
            self.sub_nbks[label][slabel][sslabel] = wx.Notebook(self.Notebook, wx.ID_ANY)
            self.sub_nbks[label][slabel]['top'].AddPage(self.sub_nbks[label][slabel][sslabel], sslabel)