2011-11-03 3 views
0

중첩 된 노트를 더 현명한 코드로 만들려고 노력했습니다. 순간, 나는이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): 
    #---------------------------------------------------------------------- 
    # 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 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) 

내가 오류를 얻을 라인을 것 같다

필자는 노트북에서 유형 오류가 발생하는 이유를 알고 있습니다. 이 문제를 해결할 방법이 있습니까?

미리 감사드립니다.

답변

0

사전과 같은 노트를 사용하고 있으므로 제대로 작동하지 않습니다.
할 수있는 작업 :

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)