class RescaleToSampleDialog(wx.Dialog): def __init__(self, parent, model, cols=None, id=wx.ID_ANY, title="Choose compounds and sample size ...", pos=wx.DefaultPosition, size=(400, 400), style=wx.DEFAULT_FRAME_STYLE, name="Rescale to Sample Dialog"): super(RescaleToSampleDialog, self).__init__(parent, id, title, pos, size, style, name) panel = wx.Panel(self) self.olv = ObjectListView(panel, wx.ID_ANY, style=wx.LC_REPORT | wx.SUNKEN_BORDER, useAlternateBackColors=True) self.olv.evenRowsBackColor = "#DCF0C7" self.olv.oddRowsBackColor = "#FFFFFF" self.SetChemicals(model, cols) scalelbl = wx.StaticText(panel, -1, "Sample size [g]:") self.sample_size = wx.TextCtrl(panel, -1, str(model.sample_size)) buttonOk = wx.Button(panel, id=wx.ID_OK) buttonOk.SetDefault() buttonCancel = wx.Button(panel, id=wx.ID_CANCEL) # layout sizer = wx.GridBagSizer(vgap=5, hgap=5) sizer.Add(self.olv, pos=(0, 0), span=(1, 4), flag=wx.GROW | wx.ALL, border=5) sizer.Add(scalelbl, pos=(1, 0), flag=wx.ALIGN_CENTER_VERTICAL | wx.LEFT | wx.RIGHT | wx.BOTTOM, border=10) sizer.Add(self.sample_size, pos=(1, 1), span=(1, 2), flag=wx.EXPAND | wx.ALIGN_LEFT | wx.RIGHT | wx.BOTTOM, border=10) sizer.Add(buttonCancel, pos=(2, 2), flag=wx.BOTTOM, border=10) sizer.Add(buttonOk, pos=(2, 3), flag=wx.BOTTOM | wx.RIGHT, border=10) sizer.AddGrowableCol(1) sizer.AddGrowableRow(0) panel.SetSizer(sizer) def SetChemicals(self, model, cols): '''Set the OLV columns and put current chemicals in the OLV''' self.olv.SetColumns(cols) self.olv.CreateCheckStateColumn() for item in model.chemicals: self.olv.Check(item) self.olv.SetObjects(model.chemicals) def GetCurrentSelections(self): ''' Return the entered sample size and objects selected in the dialog. ''' return self.sample_size.GetValue(), self.olv.GetCheckedObjects()
class TeamsWindow(wx.Panel): def __init__(self, parent, db=None): wx.Panel.__init__(self, parent, -1) self.listview = ObjectListView(self, wx.ID_ANY, style=wx.LC_REPORT | wx.SUNKEN_BORDER) sizer = wx.BoxSizer(wx.VERTICAL) sizer.Add(self.listview, 1, flag=wx.EXPAND) self.SetSizer(sizer) self.db = db pub.subscribe(self.onDivision, 'division') def onDivision(self, division): cursor = self.db.cursor(DictCursor) cursor.execute( '''SELECT team.id as db_id, team.name, flt_pos, clubname, venue_id, lat, lon, venue.name as vname FROM team LEFT JOIN division ON division_id=division.id LEFT JOIN venue ON venue_id=venue.id WHERE division.label = %s ORDER BY clubname, name''', division) self.teams = dict([(x['db_id'], Team(x)) for x in cursor.fetchall()]) self.listview.SetColumns([ ColumnDefn("ID", "left", -1, "flt_pos"), ColumnDefn("Team Name", "left", -1, "name"), ColumnDefn("Club Name", "left", -1, "clubname"), ColumnDefn("Venue", "left", -1, "vname"), ]) self.listview.CreateCheckStateColumn() self.listview.SetObjects(list(self.teams.values())) pub.sendMessage('teams', teams=self.teams.values()) def onMapSelect(self, selected): if not selected: print('No selection', flush=True) return selection = [] for x in selected: if x is not None: label, db_id, name = x if label == 'Venue': self.listview.Check(self.venues[db_id]) self.listview.Update()
class TestObjectListView(wtc.WidgetTestCase): """ Setup of all base tests used for all types of ObjectListView's and do test the normal ObjectListView. The other ObjectListView tests just override setUp to create the appropriate ListView. """ def setUp(self): super(TestObjectListView, self).setUp() panel = wx.Panel(self.frame, -1) self.objectListView = ObjectListView(panel, -1, style=wx.LC_REPORT | wx.SUNKEN_BORDER) sizerPanel = wx.BoxSizer(wx.VERTICAL) sizerPanel.Add(self.objectListView, 1, wx.ALL | wx.EXPAND, 4) panel.SetSizer(sizerPanel) sizerFrame = wx.BoxSizer(wx.VERTICAL) sizerFrame.Add(panel, 1, wx.ALL | wx.EXPAND, 4) self.frame.SetSizer(sizerFrame) loadOLV(self.objectListView) def testInitialState(self): self.objectListView.ClearAll() self.assertEqual(self.objectListView.GetColumnCount(), 0) self.assertEqual(self.objectListView.GetItemCount(), 0) self.assertEqual(len(self.objectListView.modelObjects), 0) loadOLV(self.objectListView) def testBasicState(self): self.assertEqual(self.objectListView.GetColumnCount(), len(personColumns)) self.assertEqual(self.objectListView.GetItemCount(), len(persons)) def testSelectObject(self): self.objectListView.SelectObject(persons[0]) self.assertEqual(self.objectListView.GetSelectedObject(), persons[0]) males = [x for x in persons if x.sex == "Male"] self.objectListView.SelectObjects(males) self.assertEqual(set(self.objectListView.GetSelectedObjects()), set(males)) def testSelectAll(self): self.objectListView.SelectAll() for i in range(0, self.objectListView.GetItemCount()): self.assertTrue(self.objectListView.IsSelected(i)) def testDeSelectAll(self): self.objectListView.SelectAll() self.objectListView.DeselectAll() for i in range(0, self.objectListView.GetItemCount()): self.assertFalse(self.objectListView.IsSelected(i)) def testGetSelectedObject(self): self.objectListView.SelectAll() self.assertEqual(self.objectListView.GetSelectedObject(), None) self.objectListView.DeselectAll() self.assertEqual(self.objectListView.GetSelectedObject(), None) self.objectListView.SelectObject(persons[0]) self.assertEqual(self.objectListView.GetSelectedObject(), persons[0]) self.objectListView.SelectObject(persons[1], False) self.assertEqual(self.objectListView.GetSelectedObject(), None) def testGetSelectedObjects(self): self.objectListView.SelectAll() self.assertEqual(set(self.objectListView.GetSelectedObjects()), set(persons)) self.objectListView.SelectObject(persons[0]) self.assertEqual(len(self.objectListView.GetSelectedObjects()), 1) self.objectListView.DeselectAll() self.assertEqual(len(self.objectListView.GetSelectedObjects()), 0) def testRefresh(self): rowIndex = 1 primaryColumn = self.objectListView.GetPrimaryColumnIndex() person = self.objectListView[rowIndex] nameInList = self.objectListView.GetItem(rowIndex, primaryColumn).GetText() self.assertEqual(nameInList, person.name) person.name = "Some different name" self.assertNotEqual(nameInList, person.name) self.objectListView.RefreshObject(person) self.assertEqual( self.objectListView.GetItem(rowIndex, primaryColumn).GetText(), person.name) person.name = nameInList def testSorting(self): self.objectListView.SortBy(0, False) self.assertEqual( self.objectListView.GetItem(0).GetText(), "Zoe Meliko") self.objectListView.SortBy(0, True) self.assertEqual( self.objectListView.GetItem(0).GetText(), "ae cummings") self.objectListView.SortBy(2, False) self.assertEqual( self.objectListView.GetItem(0).GetText(), "Ginger Hawk") self.objectListView.SortBy(2, True) self.assertEqual( self.objectListView.GetItem(0).GetText(), "Ian Janide") def testColumnResizing(self): widths = [ self.objectListView.GetColumnWidth(i) for i in range(len(self.objectListView.columns)) ] self.frame.SetSize(self.frame.GetSize() + (100, 100)) self.objectListView.Layout() # The space filling columns should have increased in width, but the # others should be the same for (colIndex, oldWidth) in enumerate(widths): if self.objectListView.columns[colIndex].isSpaceFilling: self.assertTrue( oldWidth < self.objectListView.GetColumnWidth(colIndex)) else: self.assertEqual(oldWidth, self.objectListView.GetColumnWidth(colIndex)) def testEditing(self): rowIndex = 1 primaryColumnIndex = self.objectListView.GetPrimaryColumnIndex() self.objectListView.cellEditMode = ObjectListView.CELLEDIT_F2ONLY # self.objectListView.SortBy(primaryColumnIndex+1) originalName = self.objectListView[rowIndex].name self.assertEqual( self.objectListView.GetItem(rowIndex, primaryColumnIndex).GetText(), originalName) self.objectListView.DeselectAll() self.objectListView.SetItemState( rowIndex, wx.LIST_STATE_SELECTED | wx.LIST_STATE_FOCUSED, wx.LIST_STATE_SELECTED | wx.LIST_STATE_FOCUSED) # Fake an F2, change the value of the edit, and then fake a Return to # commit the change evt = wx.KeyEvent(wx.EVT_CHAR.evtType[0]) evt.m_keyCode = wx.WXK_F2 self.objectListView._HandleChar(evt) self.objectListView.StartCellEdit(rowIndex, primaryColumnIndex) self.objectListView.cellEditor.SetValue("new name for X") self.objectListView.FinishCellEdit() evt.m_keyCode = wx.WXK_RETURN self.objectListView._HandleChar(evt) self.assertEqual( self.objectListView.GetItem(rowIndex, primaryColumnIndex).GetText(), "new name for X") # Put the original value back evt.m_keyCode = wx.WXK_F2 self.objectListView._HandleChar(evt) self.objectListView.StartCellEdit(rowIndex, primaryColumnIndex) self.objectListView.cellEditor.SetValue(originalName) self.objectListView.FinishCellEdit() evt.m_keyCode = wx.WXK_RETURN self.objectListView._HandleChar(evt) self.assertEqual( self.objectListView.GetItem(rowIndex, primaryColumnIndex).GetText(), originalName) def testLackOfCheckboxes(self): self.objectListView.InstallCheckStateColumn(None) firstObject = self.objectListView[0] self.assertIn(self.objectListView.IsChecked(firstObject), (None, False)) self.assertEqual(self.objectListView.GetCheckedObjects(), list()) self.objectListView.Check(firstObject) self.assertIn(self.objectListView.IsChecked(firstObject), (None, False)) def testCreateCheckStateColumn(self): self.objectListView.InstallCheckStateColumn(None) firstObject = self.objectListView[0] self.assertIn(self.objectListView.IsChecked(firstObject), (False, None)) self.objectListView.CreateCheckStateColumn() self.objectListView.Check(firstObject) self.assertEqual(self.objectListView.IsChecked(firstObject), True) def testAutoCheckboxes(self): col = ColumnDefn("Check") self.objectListView.AddColumnDefn(col) self.assertTrue(col.checkStateGetter is None) self.assertTrue(col.checkStateSetter is None) self.objectListView.InstallCheckStateColumn(col) self.assertTrue(col.checkStateGetter is not None) self.assertTrue(col.checkStateSetter is not None) object = self.objectListView[0] self.assertEqual(self.objectListView.IsChecked(object), False) self.objectListView.Check(object) self.assertEqual(self.objectListView.IsChecked(object), True) def testCheckboxes(self): def myGetter(modelObject): return getattr(modelObject, "isChecked", False) def mySetter(modelObject, newValue): modelObject.isChecked = newValue self.objectListView.SetImageLists() col = ColumnDefn("Check", checkStateGetter=myGetter, checkStateSetter=mySetter) self.objectListView.AddColumnDefn(col) self.assertEqual(self.objectListView.checkStateColumn, col) firstObject = self.objectListView[1] lastObject = self.objectListView[4] self.assertEqual(self.objectListView.IsChecked(firstObject), False) self.assertEqual(self.objectListView.IsChecked(lastObject), False) self.objectListView.Check(firstObject) self.assertEqual(self.objectListView.IsChecked(firstObject), True) self.assertEqual(self.objectListView.IsChecked(lastObject), False) self.objectListView.Check(lastObject) self.assertEqual(self.objectListView.IsChecked(firstObject), True) self.assertEqual(self.objectListView.IsChecked(lastObject), True) if not isinstance(self.objectListView, VirtualObjectListView): self.assertEqual(set(self.objectListView.GetCheckedObjects()), set([firstObject, lastObject])) self.objectListView.Uncheck(firstObject) self.assertEqual(self.objectListView.IsChecked(firstObject), False) self.assertEqual(self.objectListView.IsChecked(lastObject), True) self.objectListView.ToggleCheck(lastObject) self.assertEqual(self.objectListView.IsChecked(firstObject), False) self.assertEqual(self.objectListView.IsChecked(lastObject), False) def testNoAlternateColours(self): # When there is no alternate colors, each row's background colour # should be invalid self.objectListView.useAlternateBackColors = False self.objectListView.RepopulateList() bkgdColours = [ self.getBackgroundColour(i) for i in range(self.objectListView.GetItemCount()) ] self.assertFalse( self.objectListView.oddRowsBackColor in set(bkgdColours)) self.assertFalse( self.objectListView.evenRowsBackColor in set(bkgdColours)) def testAlternateColours(self): self.objectListView.useAlternateBackColors = True self.objectListView.RepopulateList() for i in range(self.objectListView.GetItemCount()): if i & 1: self.assertEqual(self.objectListView.oddRowsBackColor, self.getBackgroundColour(i)) else: self.assertEqual(self.objectListView.evenRowsBackColor, self.getBackgroundColour(i)) def getBackgroundColour(self, i): # There is no consistent way to get the background color of an item (i.e. one that # works on both normal and virtual lists) so we have to split this into a method # so we can change it for a virtual list return self.objectListView.GetItemBackgroundColour(i) def testEmptyListMsg(self): self.objectListView.SetObjects(None) self.assertTrue(self.objectListView.stEmptyListMsg.IsShown()) self.objectListView.SetObjects(persons) self.assertFalse(self.objectListView.stEmptyListMsg.IsShown()) def testFilteringHead(self): self.objectListView.SetFilter(Filter.Head(1)) self.objectListView.SetObjects(persons) self.assertEqual(len(self.objectListView.GetFilteredObjects()), 1) self.assertEqual(self.objectListView.GetFilteredObjects()[0], persons[0]) self.objectListView.SetFilter(None) def testFilteringTail(self): self.objectListView.SetFilter(Filter.Tail(1)) self.objectListView.SetObjects(persons) # The group list will have a group header at row 0 so skip it if isinstance(self.objectListView, GroupListView): firstDataIndex = 1 else: firstDataIndex = 0 self.assertEqual(len(self.objectListView.GetFilteredObjects()), 1) self.assertEqual(self.objectListView.GetFilteredObjects()[0], persons[-1]) self.objectListView.SetFilter(None) def testFilteringPredicate(self): males = [x for x in persons if x.sex == "Male"] self.objectListView.SetFilter( Filter.Predicate(lambda person: person.sex == "Male")) self.objectListView.SetSortColumn(personColumns[-1]) self.objectListView.SetObjects(persons) self.assertEqual(set(self.objectListView.GetFilteredObjects()), set(males)) self.objectListView.SetFilter(None) def testFilteringTextSearch(self): containsF = [ x for x in persons if "f" in x.sex.lower() or "f" in x.name.lower() ] self.objectListView.SetFilter( Filter.TextSearch(self.objectListView, text="f")) self.objectListView.SetObjects(persons) self.assertEqual(set(self.objectListView.GetFilteredObjects()), set(containsF)) self.objectListView.SetFilter(None) def testFilteringChain(self): filterMale = Filter.Predicate(lambda person: person.sex == "Male") filterContainsF = Filter.TextSearch(self.objectListView, text="f") self.objectListView.SetFilter(Filter.Chain(filterMale, filterContainsF)) self.objectListView.SetObjects(persons) self.assertEqual(len(self.objectListView.GetFilteredObjects()), 1) self.assertEqual(self.objectListView.GetFilteredObjects()[0].name, "Eric Fandango") self.objectListView.SetFilter(None)
class exportDialog(wx.Dialog): def __init__(self, title, filename, name="exportDialog"): LoadLog.LogMsg(gen.logger.debug, u"打开数据导出对话框") wx.Dialog.__init__(self, None, -1, title=title, style=wx.DEFAULT_DIALOG_STYLE) self.filename = filename self.panel = panel = wx.Panel(self, -1) self.plist = ObjectListView(panel, id=-1, size=(-1, -1), style=wx.LC_REPORT | wx.LC_VRULES | wx.LC_HRULES | wx.BORDER_SUNKEN) self.setResults(self.filename) font = wx.Font(12, wx.MODERN, wx.NORMAL, wx.NORMAL, False, u'Consolas') text_information = wx.StaticText(panel, label=u"导出数据") text_information.SetFont(font) line = wx.StaticLine(panel) #self.SetBackgroundColour("while") selectbtn = wx.Button(panel, label=u"全选", size=(80, 22), id=wx.ID_SELECTALL) unselectbtn = wx.Button(panel, label=u"取消", size=(80, 22), id=gen.ID_UNSELECTALL) add_t = wx.StaticText(panel, label=u"导出位置:") self.path_t = path_t = wx.TextCtrl( panel, validator=InputValidator("save_path_t"), style=wx.TE_READONLY) #self.path_t.SetBackgroundColour("light blue") pathbtn = wx.Button(panel, label=u"选择", size=(80, 25), id=wx.ID_SAVEAS) button_save = wx.Button(panel, label=u"确定", size=(80, 25), id=wx.ID_OK) button_cancel = wx.Button(panel, label=u"取消", size=(80, 25), id=wx.ID_CANCEL) sizer = wx.GridBagSizer(7, 5) sizer.Add(text_information, pos=(0, 0), span=(1, 3), flag=wx.TOP | wx.LEFT, border=10) sizer.Add(line, pos=(1, 0), span=(1, 5), flag=wx.EXPAND | wx.TOP, border=0) sizer.Add(self.plist, pos=(2, 0), span=(1, 5), flag=wx.EXPAND | wx.RIGHT | wx.LEFT, border=10) sizer.Add(selectbtn, pos=(3, 0), span=(1, 1), flag=wx.RIGHT | wx.LEFT, border=10) sizer.Add(unselectbtn, pos=(3, 1), span=(1, 1), flag=wx.RIGHT | wx.LEFT, border=10) sizer.Add(add_t, pos=(4, 0), span=(1, 1), flag=wx.LEFT, border=10) sizer.Add(path_t, pos=(5, 0), span=(1, 4), flag=wx.EXPAND | wx.LEFT, border=10) sizer.Add(pathbtn, pos=(5, 4), span=(1, 1), flag=wx.RIGHT, border=10) sizer.Add(button_save, pos=(7, 3), span=(1, 1), flag=wx.RIGHT | wx.TOP | wx.BOTTOM | wx.ALIGN_RIGHT, border=10) sizer.Add(button_cancel, pos=(7, 4), span=(1, 1), flag=wx.RIGHT | wx.TOP | wx.BOTTOM | wx.ALIGN_RIGHT, border=10) #sizer.AddGrowableCol(0) panel.SetSizerAndFit(sizer) sizer.SetSizeHints(self) #self.OnSelectAll = self.evt.OnSelectAll self.Bind(wx.EVT_BUTTON, self.OnSelectAll, id=wx.ID_SELECTALL) self.Bind(wx.EVT_BUTTON, self.OnSelectAll, id=gen.ID_UNSELECTALL) self.Bind(wx.EVT_BUTTON, self.OnSelectFile, id=wx.ID_SAVEAS) def setResults(self, filename): self.plist.SetColumns([ ColumnDefn(u"序号", "center", 40, "id"), ColumnDefn(u"名称", "left", 80, "name"), ColumnDefn(u"程序", "left", 120, "programe"), ColumnDefn(u"备注", "left", 100, "note"), ]) self.plist.CreateCheckStateColumn() self.list_data = DataHandle(filename).handleList() self.plist.SetObjects(self.list_data) def OnSelectAll(self, event): objects = self.plist.GetObjects() for obj in objects: if event.GetId() == wx.ID_SELECTALL: self.plist.SetCheckState(obj, True) else: self.plist.SetCheckState(obj, False) self.plist.RefreshObjects(objects) def OnSelectFile(self, event): wildcard = "Json File (*.json)|*.json|" \ "All files (*.*)|*.*" dialog = wx.FileDialog(self, u"选择文件", "", "", wildcard, wx.SAVE | wx.OVERWRITE_PROMPT) if dialog.ShowModal() == wx.ID_OK: self.filepath = dialog.GetPath() self.path_t.SetValue(self.filepath) dialog.Destroy() def handleExportDlg(self): allobj = self.plist.GetObjects() tbool = [] LoadLog.LogMsg(gen.logger.debug, u"检测选项") for obj in allobj: if self.plist.IsChecked(obj) == True: tbool.append(self.plist.IsChecked(obj)) if tbool.count(True) == 0: LoadLog.LogMsg(gen.logger.warning, u"未选取任何要导出的项目") wx.MessageBox(u"未选取内容,没有数据导出", u'警告', wx.OK | wx.ICON_WARNING, parent=self.panel) return else: newDataDict = {} #print u"=====读取的文件:",self.filename readFileData = DataHandle(self.filename) pdata = readFileData.ReadData() #print u"====导出对话框从文件读取的字典:",pdata for obj in allobj: if self.plist.IsChecked(obj) == True: kid = obj.kid #print u"###选中的kid",kid #print u"###字典,kid 对应的项",pdata[kid] newDataDict[kid] = pdata[kid] try: print newDataDict exportObj = DataHandle(self.filepath) exportObj.WriteData(newDataDict) wx.MessageBox(u"数据文件成功导出!", u'信息', wx.OK | wx.ICON_INFORMATION) LoadLog.LogMsg(gen.logger.info, u"成功导出数据到文件") except: wx.MessageBox(u"保存文件出错,请检查文件权限", u'错误', wx.OK | wx.ICON_ERROR) LoadLog.LogMsg(gen.logger.warning, u"导出文件出错") return
class MainPanel(wx.Panel): #---------------------------------------------------------------------- def __init__(self, parent): wx.Panel.__init__(self, parent=parent, id=wx.ID_ANY) self.products = [ Book("wxPython in Action", "Robin Dunn", "1932394621", "Manning"), Book("Hello World", "Warren and Carter Sande", "1933988495", "Manning") ] self.dataOlv = ObjectListView(self, wx.ID_ANY, style=wx.LC_REPORT | wx.SUNKEN_BORDER) self.setBooks() # Allow the cell values to be edited when double-clicked self.dataOlv.cellEditMode = ObjectListView.CELLEDIT_SINGLECLICK # create an update button updateBtn = wx.Button(self, wx.ID_ANY, "Update OLV") updateBtn.Bind(wx.EVT_BUTTON, self.updateControl) # Create some sizers mainSizer = wx.BoxSizer(wx.VERTICAL) mainSizer.Add(self.dataOlv, 1, wx.ALL | wx.EXPAND, 5) mainSizer.Add(updateBtn, 0, wx.ALL | wx.CENTER, 5) self.SetSizer(mainSizer) #---------------------------------------------------------------------- def updateControl(self, event): """ """ print("updating...") product_dict = [{ "title": "Core Python Programming", "author": "Wesley Chun", "date": "0132269937", "URL": "Prentice Hall" }, { "title": "Python Programming for the Absolute Beginner", "author": "Michael Dawson", "date": "1598631128", "URL": "Course Technology" }, { "title": "Learning Python", "author": "Mark Lutz", "date": "0596513984", "URL": "O'Reilly" }] data = self.products + product_dict self.dataOlv.CreateCheckStateColumn() self.dataOlv.SetObjects(data) self.CheckBoxes = True #---------------------------------------------------------------------- def setBooks(self, data=None): self.dataOlv.SetColumns([ ColumnDefn("Title", "left", 220, "title"), ColumnDefn("Author", "left", 200, "author"), ColumnDefn("date", "right", 100, "date"), ColumnDefn("URL", "left", 180, "URL") ]) self.dataOlv.SetObjects(self.products)
class ModifyPanel(wx.Panel): """""" def __init__(self, parent): """Constructor""" wx.Panel.__init__(self, parent=parent) main_Sizer = wx.BoxSizer(wx.VERTICAL) #strinfo=u" 对apk渠道各个资源的配置写在channelconfig.xlsx,并且放到程序目录下" #self.infosta= wx.StaticText(self, -1, strinfo) #select a apk ui self.apk_Box = wx.StaticBox(self, -1, u"Apk") apkBoxSizer = wx.StaticBoxSizer(self.apk_Box, wx.HORIZONTAL) self.apksta = wx.StaticText(self, -1, u"apk包: ") self.apkdiredit = wx.TextCtrl(self, -1, "") self.apkdirbtn = wx.Button(self, label=u"...") apkBoxSizer.Add(self.apksta, 0, wx.ALL | wx.ALIGN_TOP, 5) apkBoxSizer.Add(self.apkdiredit, 1, wx.ALL | wx.ALIGN_TOP, 5) apkBoxSizer.Add(self.apkdirbtn, 0, wx.ALL | wx.ALIGN_TOP, 5) #select a resource ui """ self.res_Box = wx.StaticBox(self, -1, u"Resource") resBoxSizer = wx.StaticBoxSizer(self.res_Box, wx.HORIZONTAL) self.ressta = wx.StaticText(self, -1, u"资源目录:") self.resdiredit = wx.TextCtrl(self, -1, "") self.resdirbtn = wx.Button(self, label=u"...") resBoxSizer.Add(self.ressta, 0, wx.ALL|wx.ALIGN_TOP, 5) resBoxSizer.Add(self.resdiredit, 1, wx.ALL|wx.ALIGN_TOP, 5) resBoxSizer.Add(self.resdirbtn, 0, wx.ALL|wx.ALIGN_TOP, 5) """ #set out put directory self.outPut_Box = wx.StaticBox(self, -1, u"Output") outPutBoxSizer = wx.StaticBoxSizer(self.outPut_Box, wx.HORIZONTAL) self.outPutsta = wx.StaticText(self, -1, u"输出目录:") self.outPutdiredit = wx.TextCtrl(self, -1, "") self.outPutdirbtn = wx.Button(self, label=u"...") outPutBoxSizer.Add(self.outPutsta, 0, wx.ALL | wx.ALIGN_TOP, 5) outPutBoxSizer.Add(self.outPutdiredit, 1, wx.ALL | wx.ALIGN_TOP, 5) outPutBoxSizer.Add(self.outPutdirbtn, 0, wx.ALL | wx.ALIGN_TOP, 5) #layout operate button #The list static box self.choiceList_Box = wx.StaticBox(self, -1, u"列表") self.choiceSel = wx.Choice(self, -1, choices=[u"全不选", u"反选", u"全选"]) self.choiceSel.SetSelection(0) self.keyStoreChoiceSel = wx.Choice(self, -1) choice_BoxSizer = wx.StaticBoxSizer(self.choiceList_Box, wx.HORIZONTAL) choice_BoxSizer.Add(self.choiceSel, 0, wx.ALL | wx.ALIGN_TOP, 5) choice_BoxSizer.Add(self.keyStoreChoiceSel, 0, wx.ALL | wx.ALIGN_TOP, 5) self.saveBtn = wx.Button(self, label=u"保存UI") self.GenBtn = wx.Button(self, label=u"生成") operate_Sizer = wx.BoxSizer(wx.HORIZONTAL) operate_Sizer.Add(choice_BoxSizer, 0, wx.ALIGN_LEFT | wx.EXPAND | wx.ALL, 5) operate_Sizer.Add(self.saveBtn, 0, wx.ALIGN_LEFT | wx.EXPAND | wx.ALL, 5) operate_Sizer.Add(self.GenBtn, 0, wx.ALIGN_LEFT | wx.EXPAND | wx.ALL, 5) #add listctrl self.resultsOlv = ObjectListView(self, style=wx.LC_REPORT | wx.SUNKEN_BORDER) self.InitColumns() self.progress = wx.Gauge(self, -1) self.progress.SetRange(100) #main_Sizer.Add(self.infosta, 0, wx.EXPAND|wx.ALL, 5) main_Sizer.Add(apkBoxSizer, 0, wx.EXPAND | wx.ALL, 5) #main_Sizer.Add(resBoxSizer, 0, wx.EXPAND|wx.ALL, 5) main_Sizer.Add(outPutBoxSizer, 0, wx.EXPAND | wx.ALL, 5) main_Sizer.Add(self.resultsOlv, 1, wx.EXPAND | wx.ALL, 5) main_Sizer.Add(self.progress, 0, wx.EXPAND | wx.ALL, 5) main_Sizer.Add(operate_Sizer, 0, wx.EXPAND | wx.ALL, 5) self.SetSizer(main_Sizer) self.apkdirbtn.Bind(wx.EVT_BUTTON, self.onSelApkButton) #self.resdirbtn.Bind(wx.EVT_BUTTON, self.onSelResButton) self.outPutdirbtn.Bind(wx.EVT_BUTTON, self.onSelOutDirButton) self.choiceSel.Bind(wx.EVT_CHOICE, self.OnSelChoice) self.saveBtn.Bind(wx.EVT_BUTTON, self.onSaveUIButton) self.GenBtn.Bind(wx.EVT_BUTTON, self.onGenButton) #Set choice change event. self.choicesDict = {} self.choicesDict[u"全不选"] = self.ListCheckNotSel self.choicesDict[u"反选"] = self.ListCheckInverSel self.choicesDict[u"全选"] = self.ListCheckSelAll self.progress.SetValue(0) self.loadChannelCofigToList() #=======================Init End=====================================# def loadChannelCofigToList(self): """ Load Channel config then show to UI listCtrl""" UIConfigParser.getInstance().Read() ChannelResConfigParser.getInstance().Read() self.test_data = [] configData = ChannelResConfigParser.getInstance().getConfigData() for (key, value) in configData.items(): if key == "keystore": continue self.test_data.append(Results(str(key), "", "")) #Set value to list. self.resultsOlv.SetObjects(self.test_data) objects = self.resultsOlv.GetObjects() #Refresh UI. self.resultsOlv.RefreshObjects(objects) if configData.has_key("keystore"): for (key, value) in configData["keystore"].items(): self.keyStoreChoiceSel.Append(key) self.keyStoreChoiceSel.SetSelection(0) self.apkdiredit.SetValue(UIConfigParser.getInstance().getApkPath()) self.outPutdiredit.SetValue( UIConfigParser.getInstance().getOutPutPath()) def InitColumns(self): """Init list colums.""" self.resultsOlv.SetColumns([ ColumnDefn(u"渠道", "left", 150, "channal_id"), #ColumnDefn(u"渠道信息", "left", 160, "channal_alias"), #ColumnDefn(u"渠道特制", "left", 320, "channal_custom") ]) self.resultsOlv.CreateCheckStateColumn() def onSelApkButton(self, event): file_wildcard = "source file(*.apk)|*.apk" dialog = wx.FileDialog( self, "Get a apk file", #os.getcwd(), style=wx.FD_OPEN | wx.FD_CHANGE_DIR, wildcard=file_wildcard) if dialog.ShowModal() != wx.ID_OK: return self.apkdiredit.SetValue(dialog.GetPath()) pass def onSelResButton(self, event): dialog = wx.DirDialog(None, u"选择资源目录:", style=wx.DD_DEFAULT_STYLE | wx.DD_NEW_DIR_BUTTON) if dialog.ShowModal() == wx.ID_OK: self.resdiredit.SetValue(dialog.GetPath()) def onSelOutDirButton(self, event): dialog = wx.DirDialog(None, u"选择输出目录:", style=wx.DD_DEFAULT_STYLE | wx.DD_NEW_DIR_BUTTON) if dialog.ShowModal() == wx.ID_OK: self.outPutdiredit.SetValue(dialog.GetPath()) pass def onSaveUIButton(self, event): self.saveUiInfo() def saveUiInfo(self): UIConfigParser.getInstance().setApkPath(self.apkdiredit.GetValue()) UIConfigParser.getInstance().setOutPutPath( self.outPutdiredit.GetValue()) UIConfigParser.getInstance().Write() def onGenButton(self, event): apkFile = self.apkdiredit.GetValue() if apkFile.strip() == "": self.messageBox(u"未选择APK") return if self.fileNoExist(apkFile): return """ resdir = self.resdiredit.GetValue() if resdir.strip() == "": self.messageBox(u"未选择资源目录") return if self.fileNoExist(resdir): return """ outPutdir = self.outPutdiredit.GetValue() if outPutdir.strip() == "": self.messageBox(u"未选择输出目录") return if self.fileNoExist(outPutdir): return iSel = self.keyStoreChoiceSel.GetSelection() keyStore = self.keyStoreChoiceSel.GetString(iSel) if keyStore.strip() == "": self.messageBox(u"keyStore为空") return if self.fileNoExist("%s/%s" % (sys.path[0], keyStore)): return #If the channel be selected,it's value is 1. #otherwise it's value is 0. selChanneldict = {} objects = self.resultsOlv.GetObjects() for obj in objects: if self.resultsOlv.GetCheckState(obj, 0): selChanneldict[self.resultsOlv.GetStringValueAt(obj, 1)] = 0 #No select channel. if len(selChanneldict) <= 0: self.messageBox(u"未选择渠道") return self.saveUiInfo() #Call parse modify.callParse(selChanneldict, apkFile, outPutdir, keyStore, self.progress) dlg = wx.MessageDialog(None, u"渠道处理完成", u"", wx.wx.OK) result = dlg.ShowModal() dlg.Destroy() self.progress.SetValue(0) def fileNoExist(self, filename): if os.path.exists(filename): return False dlg = wx.MessageDialog(None, u"%s 不存在" % (filename), u"错误", wx.OK | wx.ICON_ERROR) result = dlg.ShowModal() dlg.Destroy() return True def messageBox(self, errorMsg): dlg = wx.MessageDialog(None, errorMsg, u"错误", wx.OK | wx.ICON_ERROR) result = dlg.ShowModal() dlg.Destroy() #========================choice event====================# def OnSelChoice(self, event): """Choice change event""" iSel = self.choiceSel.GetSelection() selString = self.choiceSel.GetString(iSel) self.choicesDict[selString]() def ListCheckSelAll(self): """Select all channals""" objects = self.resultsOlv.GetObjects() for obj in objects: self.resultsOlv.SetCheckState(obj, True) self.resultsOlv.RefreshObjects(objects) def ListCheckInverSel(self): """Inverse selection""" objects = self.resultsOlv.GetObjects() for obj in objects: self.resultsOlv.SetCheckState( obj, not self.resultsOlv.GetCheckState(obj)) self.resultsOlv.RefreshObjects(objects) def ListCheckNotSel(self): """No select channals """ objects = self.resultsOlv.GetObjects() for obj in objects: self.resultsOlv.SetCheckState(obj, False) self.resultsOlv.RefreshObjects(objects)
class LeftPanel(wx.Panel): def __init__(self, parent): wx.Panel.__init__(self, parent=parent) self.plots = [] self.pickedColors = [] self.colors = self.setupColors() self.plotsOlv = ObjectListView(self, wx.ID_ANY, style=wx.LC_REPORT | wx.SUNKEN_BORDER, useAlternateBackColors=False) self.plotsOlv.Bind(OLVEvent.EVT_ITEM_CHECKED, self.checkboxClicked) self.plotsOlv.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.onDoubleClick) #self.plotsOlv.Bind(wx.EVT_LIST_ITEM_RIGHT_CLICK, self.onRightClick) self.getPlots() self.setColumns() self.plotsOlv.CreateCheckStateColumn() self.plotsOlv.SetObjects(self.plots) bsizer = wx.BoxSizer() #bsizer.Add(lb, 1, wx.EXPAND) bsizer.Add(self.plotsOlv, 1, wx.EXPAND) self.SetSizer(bsizer) self.checkedPlots = {} pub.subscribe(self.refreshList, 'list.updated') pub.subscribe(self.checkboxClicked, 'checkbox.clicked') pub.subscribe(self.onSavePlot, 'file.savePlot') pub.subscribe(self.onDelete, 'edit.delete') def onDoubleClick(self, event): #print event.m_itemIndex dlg = wx.ColourDialog(self) # Ensure the full colour dialog is displayed, # not the abbreviated version. dlg.GetColourData().SetChooseFull(True) if dlg.ShowModal() == wx.ID_OK: data = dlg.GetColourData() color = data.GetColour().Get() htmlColor = "#%02x%02x%02x" % color dlg.Destroy() index = event.m_itemIndex stored.plots[index]['Color'] = htmlColor self.plots[index].icon = self.plots[index].createIcon( self.plotsOlv, htmlColor) self.plotsOlv.RefreshObject(self.plots[index]) pub.sendMessage('item.checked', data=self.checkedPlots) def onDelete(self): if self.plotsOlv.GetSelectedObjects(): objectList = self.plotsOlv.GetSelectedObjects() for object in objectList: index = object.index stored.plots.pop(index) self.plots.pop(index) self.refreshList() pub.sendMessage('update.statusBar', data="Plots deleted!") else: pub.sendMessage( 'update.statusBar', data="Cannot delete plots! Please select one ore more plots!") def onSavePlot(self): if self.plotsOlv.GetSelectedObject(): index = self.plotsOlv.GetSelectedObject().index data = stored.plots[index] outputString = "%s\n" % data['Title'] outputString += "%s\n" % data['Type'] outputString += "%s,%s\n" % (data['xTitle'], data['xTitle']) for idx, row in enumerate(data['xData'].tolist()): z = 0 outputString += "%1.3f,%1.3f\n" % (data['xData'][idx], data['yData'][idx]) if stored.plots[index]['Type'] == "DifferenceMap" or stored.plots[ index]['Type'] == "DistanceMap": outputString += "z-Data:\n" numpy.set_printoptions(threshold=numpy.nan) zData = numpy.array_str(data['zData']) outputString += zData dialog = wx.FileDialog(None, message="Save plot data as ...", defaultDir=os.getcwd(), defaultFile=stored.plots[index]['Title'], wildcard="*.dat", style=wx.SAVE | wx.OVERWRITE_PROMPT) if dialog.ShowModal() == wx.ID_OK: path = dialog.GetPath() dataFile = open(path, 'w') print "\nSaving data...", dataFile.write(outputString) print "Done!\n" dataFile.close() dialog.Destroy() pub.sendMessage('update.statusBar', data="Plot data saved!") else: pub.sendMessage('update.statusBar', data="Cannot save data! Please select one plot!") def setupColors(self): cnames = { 'aliceblue': '#F0F8FF', 'antiquewhite': '#FAEBD7', 'aqua': '#00FFFF', 'aquamarine': '#7FFFD4', 'azure': '#F0FFFF', 'beige': '#F5F5DC', 'bisque': '#FFE4C4', 'black': '#000000', 'blanchedalmond': '#FFEBCD', 'blue': '#0000FF', 'blueviolet': '#8A2BE2', 'brown': '#A52A2A', 'burlywood': '#DEB887', 'cadetblue': '#5F9EA0', 'chartreuse': '#7FFF00', 'chocolate': '#D2691E', 'coral': '#FF7F50', 'cornflowerblue': '#6495ED', 'cornsilk': '#FFF8DC', 'crimson': '#DC143C', 'cyan': '#00FFFF', 'darkblue': '#00008B', 'darkcyan': '#008B8B', 'darkgoldenrod': '#B8860B', 'darkgray': '#A9A9A9', 'darkgreen': '#006400', 'darkkhaki': '#BDB76B', 'darkmagenta': '#8B008B', 'darkolivegreen': '#556B2F', 'darkorange': '#FF8C00', 'darkorchid': '#9932CC', 'darkred': '#8B0000', 'darksalmon': '#E9967A', 'darkseagreen': '#8FBC8F', 'darkslateblue': '#483D8B', 'darkslategray': '#2F4F4F', 'darkturquoise': '#00CED1', 'darkviolet': '#9400D3', 'deeppink': '#FF1493', 'deepskyblue': '#00BFFF', 'dimgray': '#696969', 'dodgerblue': '#1E90FF', 'firebrick': '#B22222', 'floralwhite': '#FFFAF0', 'forestgreen': '#228B22', 'fuchsia': '#FF00FF', 'gainsboro': '#DCDCDC', 'ghostwhite': '#F8F8FF', 'gold': '#FFD700', 'goldenrod': '#DAA520', 'gray': '#808080', 'green': '#008000', 'greenyellow': '#ADFF2F', 'honeydew': '#F0FFF0', 'hotpink': '#FF69B4', 'indianred': '#CD5C5C', 'indigo': '#4B0082', 'ivory': '#FFFFF0', 'khaki': '#F0E68C', 'lavender': '#E6E6FA', 'lavenderblush': '#FFF0F5', 'lawngreen': '#7CFC00', 'lemonchiffon': '#FFFACD', 'lightblue': '#ADD8E6', 'lightcoral': '#F08080', 'lightcyan': '#E0FFFF', 'lightgoldenrodyellow': '#FAFAD2', 'lightgreen': '#90EE90', 'lightgray': '#D3D3D3', 'lightpink': '#FFB6C1', 'lightsalmon': '#FFA07A', 'lightseagreen': '#20B2AA', 'lightskyblue': '#87CEFA', 'lightslategray': '#778899', 'lightsteelblue': '#B0C4DE', 'lightyellow': '#FFFFE0', 'lime': '#00FF00', 'limegreen': '#32CD32', 'linen': '#FAF0E6', 'magenta': '#FF00FF', 'maroon': '#800000', 'mediumaquamarine': '#66CDAA', 'mediumblue': '#0000CD', 'mediumorchid': '#BA55D3', 'mediumpurple': '#9370DB', 'mediumseagreen': '#3CB371', 'mediumslateblue': '#7B68EE', 'mediumspringgreen': '#00FA9A', 'mediumturquoise': '#48D1CC', 'mediumvioletred': '#C71585', 'midnightblue': '#191970', 'mintcream': '#F5FFFA', 'mistyrose': '#FFE4E1', 'moccasin': '#FFE4B5', 'navajowhite': '#FFDEAD', 'navy': '#000080', 'oldlace': '#FDF5E6', 'olive': '#808000', 'olivedrab': '#6B8E23', 'orange': '#FFA500', 'orangered': '#FF4500', 'orchid': '#DA70D6', 'palegoldenrod': '#EEE8AA', 'palegreen': '#98FB98', 'paleturquoise': '#AFEEEE', 'palevioletred': '#DB7093', 'papayawhip': '#FFEFD5', 'peachpuff': '#FFDAB9', 'peru': '#CD853F', 'pink': '#FFC0CB', 'plum': '#DDA0DD', 'powderblue': '#B0E0E6', 'purple': '#800080', 'red': '#FF0000', 'rosybrown': '#BC8F8F', 'royalblue': '#4169E1', 'saddlebrown': '#8B4513', 'salmon': '#FA8072', 'sandybrown': '#FAA460', 'seagreen': '#2E8B57', 'seashell': '#FFF5EE', 'sienna': '#A0522D', 'silver': '#C0C0C0', 'skyblue': '#87CEEB', 'slateblue': '#6A5ACD', 'slategray': '#708090', 'snow': '#FFFAFA', 'springgreen': '#00FF7F', 'steelblue': '#4682B4', 'tan': '#D2B48C', 'teal': '#008080', 'thistle': '#D8BFD8', 'tomato': '#FF6347', 'turquoise': '#40E0D0', 'violet': '#EE82EE', 'wheat': '#F5DEB3', 'white': '#FFFFFF', 'whitesmoke': '#F5F5F5', 'yellow': '#FFFF00', 'yellowgreen': '#9ACD32' } return cnames def setColumns(self, data=None): self.plotsOlv.SetColumns([ #imageGetter: "icon" is a property of plotListEntry objects ColumnDefn("Title", "left", 500, "title", imageGetter="icon") ]) #print "hallo" def refreshList(self): self.plotsOlv.ClearAll() self.plots = [] self.pickedColors = [] self.colors = self.setupColors() self.getPlots() self.setColumns() self.plotsOlv.CreateCheckStateColumn() self.plotsOlv.SetObjects(self.plots) self.checkedPlots = {} def getPlots(self): for idx, plot in enumerate(stored.plots): #print self.colors if not "Color" in plot: allowedColor = False preferredCnames = { 'blue': '#0000FF', 'green': '#008000', 'red': '#FF00FF', 'orange': '#FFA500', 'violet': '#EE82EE', 'magenta': '#FF0000' } while not allowedColor: if len(preferredCnames) > 0: color = preferredCnames.popitem()[1] else: color = self.colors.popitem()[1] if not color in self.pickedColors: allowedColor = True self.pickedColors.append(color) #print color plot['Color'] = color else: pass olv = self.plotsOlv self.plots.append( PlotListEntry(olv, plot['Type'], plot['Title'], plot['Color'], idx)) #print self.plots def checkboxClicked(self, data): data.rowModel.toggleState() index = data.rowModel.index isChecked = data.rowModel.isChecked currentPlot = stored.plots[index] currentId = index currentType = currentPlot["Type"] allowed = True nonSuperposeableTypes = ["DifferenceMap", "DistanceMap"] if len(self.checkedPlots) == 0 and isChecked: #this is the first checked plot, just add it self.checkedPlots[currentId] = currentPlot #print "Added first plot" elif len(self.checkedPlots) > 0 and isChecked: #check if of same type as other checked plots for key, value in self.checkedPlots.iteritems(): #value will be a graph dict from mtsslWizard if currentType != value[ "Type"] or currentType in nonSuperposeableTypes: allowed = False #print "False, cannot add plot" if allowed: self.checkedPlots[currentId] = currentPlot #print "True, plot added" else: #self.lb.Check(index, check=False) print "New:" print self.plotsOlv.GetCheckState(data.rowModel) self.plotsOlv.SetCheckState(data.rowModel, False) #data.rowModel.setCheckedState(False) pub.sendMessage( 'update.statusBar', data="Plots are not of same type or not superposeable!") print self.plotsOlv.GetCheckState(data.rowModel) self.plotsOlv.RefreshObject(data.rowModel) elif len(self.checkedPlots) > 0 and not isChecked: self.checkedPlots.pop(currentId, None) #print "removed plot from plot list" pub.sendMessage('item.checked', data=self.checkedPlots)
class RescaleToItemDialog(wx.Dialog): def __init__(self, parent, objects, cols=None, id=wx.ID_ANY, title="Choose an item and the amount", pos=wx.DefaultPosition, size=(400, 400), style=wx.DEFAULT_FRAME_STYLE, name="Rescale to Item Dialog"): ''' A dialog to get the selected objects (components or chemicals) and the amount (moles or grams). The dialog is used in the conventional batch calculation (moles to masses) as well as in the inverse (masses to moles). ''' super(RescaleToItemDialog, self).__init__(parent, id, title, pos, size, style, name) panel = wx.Panel(self) self.olv = ObjectListView(panel, wx.ID_ANY, style=wx.LC_REPORT | wx.SUNKEN_BORDER, useAlternateBackColors=True) self.olv.evenRowsBackColor = "#DCF0C7" self.olv.oddRowsBackColor = "#FFFFFF" self.SetObjects(objects, cols) scalelbl = wx.StaticText(panel, -1, "Amount:") self.amount = wx.TextCtrl(panel, -1, "{0:6.2f}".format(1.0).strip()) buttonOk = wx.Button(panel, id=wx.ID_OK) buttonOk.SetDefault() buttonCancel = wx.Button(panel, id=wx.ID_CANCEL) # layout sizer = wx.GridBagSizer(vgap=5, hgap=5) sizer.Add(self.olv, pos=(0, 0), span=(1, 4), flag=wx.GROW | wx.ALL, border=5) sizer.Add(scalelbl, pos=(1, 0), flag=wx.ALIGN_CENTER_VERTICAL | wx.LEFT | wx.RIGHT | wx.BOTTOM, border=10) sizer.Add(self.amount, pos=(1, 1), span=(1, 2), flag=wx.EXPAND | wx.ALIGN_LEFT | wx.RIGHT | wx.BOTTOM, border=10) sizer.Add(buttonCancel, pos=(2, 2), flag=wx.BOTTOM, border=10) sizer.Add(buttonOk, pos=(2, 3), flag=wx.BOTTOM | wx.RIGHT, border=10) sizer.AddGrowableCol(1) sizer.AddGrowableRow(0) panel.SetSizer(sizer) def SetObjects(self, objects, cols): '''Set the OLV columns and put current objects in the OLV''' self.olv.SetColumns(cols) self.olv.CreateCheckStateColumn() self.olv.SetObjects(objects) def GetCurrentSelections(self): '''Return the entered amount and objects selected in the dialog.''' return self.amount.GetValue(), self.olv.GetCheckedObjects()
class ProvPanel(wx.Panel): def __init__(self, parent, id, style): LoadLog.LogMsg(gen.logger.info, u"加载下边框架面板") wx.Panel.__init__(self, id=id, parent=parent, style=style) vSizer = wx.BoxSizer(wx.VERTICAL) self.SetBackgroundColour("while") self.ProgrameList = ObjectListView(self, id=wx.ID_VIEW_LIST, size=(-1, 50), style=wx.LC_REPORT | wx.SUNKEN_BORDER | wx.LC_VRULES | wx.LC_HRULES) #self.ProgrameList.cellEditMode = ObjectListView.CELLEDIT_SINGLECLICK self.setResults(gen._filedata) self.ListButtonUI() ##列表控件布局 vSizer.Add(self.ProgrameList, 1, wx.EXPAND | wx.ALL, 5) ##按钮的布局 vSizer.Add(self.sSizer, 0, wx.ALL, 2) self.SetSizerAndFit(vSizer) ##双击列表事件绑定 self.evt = EventHandle(gen._filedata, self.ProgrameList) ##实例调用EventHandle 类的一个对话框事件方法 self.OnAdd_Edit_Dialog = self.evt.OnAdd_Edit_Dialog self.ProgrameList.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.OnAdd_Edit_Dialog, id=wx.ID_VIEW_LIST) def setResults(self, filename): self.ProgrameList.SetColumns([ ColumnDefn(u"序号", "left", 40, "id"), ColumnDefn(u"名称", "left", 100, "name"), ColumnDefn(u"程序", "left", 150, "programe"), ColumnDefn(u"参数", "left", 150, "logfile"), ColumnDefn(u"状态", "center", 60, "status"), ColumnDefn(u"监控", "left", 40, "monitor"), ColumnDefn(u"条件", "center", 50, "operator"), ColumnDefn(u"进程数", "left", 50, "processNum"), ColumnDefn(u"启动方式", "center", 60, "runAs"), ColumnDefn(u"备注", "left", 150, "note"), ]) ##使用checkBox 复选框 self.ProgrameList.CreateCheckStateColumn() self.SetDataInListctrl(filename) def SetDataInListctrl(self, filename): LoadLog.LogMsg(gen.logger.info, u"加载控件列表,初始化数据") ##获取数据列表 self.list_data = DataHandle(filename).handleList() ##设置数据列表到列表控件 self.ProgrameList.SetObjects(self.list_data) ##列表控件下面的按钮 def ListButtonUI(self): self.sSizer = sSizer = wx.BoxSizer(wx.HORIZONTAL) SelectAllButton = wx.Button(self, id=wx.ID_SELECTALL, size=(50, 22), label=u"全选") RSelectAllButton = wx.Button(self, id=gen.ID_UNSELECTALL, size=(50, 22), label=u"取消") #ClearButton = wx.Button(self,id=gen.ID_SELECTCLEAR,size=(50,22),label = u"测试") #ImportButton = wx.Button(self,id=gen.ID_IMPORT,size=(50,22),label = u"导入") #ExportButton = wx.Button(self,id=gen.ID_EXPORT,size=(50,22),label = u"导出") sSizer.Add(SelectAllButton, 0, wx.LEFT, 2) sSizer.Add(RSelectAllButton, 0, wx.LEFT, 10) #sSizer.Add(ClearButton,0,wx.LEFT,10) #sSizer.Add(ImportButton,0,wx.LEFT,10) #sSizer.Add(ExportButton,0,wx.LEFT,10) self.evt = EventHandle(gen._filedata, self.ProgrameList) self.Bind(wx.EVT_BUTTON, self.evt.OnSelectAll, id=wx.ID_SELECTALL) self.Bind(wx.EVT_BUTTON, self.evt.OnSelectAll, id=gen.ID_UNSELECTALL)