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)