def create_editors(self): class PredicateValidator(wx.PyValidator): def __init__(self, predicate): wx.Validator.__init__(self) self.predicate = predicate def Clone(self): return self.__class__(self.predicate) def Validate(self, parent): print(parent) return self.predicate(parent) self.speed_editor = grid.GridCellTextEditor() def validate_speed(s): return True self.speed_editor.SetValidator(PredicateValidator(validate_speed)) self.repeat_editor = grid.GridCellTextEditor() def validate_repeat(s): return True self.repeat_editor.SetValidator(PredicateValidator(validate_repeat))
def __init__(self, datasource, rowLabels=None, colLabels=None): ''' [ [value1,value2,value3,...], [value1,value2,value3,...], [value1,value2,value3,...], ... ] ''' grd.PyGridTableBase.__init__(self) self.data = {} self.colLabels = colLabels self.rowLabels = rowLabels self.rows = len(datasource) #行数 self.cols = len(self.colLabels) #行数 i = 0 for row in datasource: j = 0 for v in row: self.data[(i, j)] = v #给每一个单元格赋值的方法 j += 1 i += 1 self.cell = grd.GridCellAttr() self.cell.SetOverflow(False) self.cell.SetReadOnly() self.imagecell = grd.GridCellAttr() self.imagecell.SetEditor(grd.GridCellTextEditor()) self.imagecell.SetRenderer(BitmapRenderer()) self.imagecell.SetReadOnly()
def __init__(self, parent, thumb_size=THUMB_SIZE): super(Grid, self).__init__(parent) #table self.table = self.Table(thumb_size) self.image_table = self.table.table self.SetTable(self.table, True) self.SetRowLabelSize(260) self._rows_number = self.GetNumberRows() self._cols_number = self.GetNumberCols() self._cols_sized = [] #bitmap self.PENCIL_BITMAP = getPencilBitmap() self.PENCIL_BITMAP_SIZE = self.PENCIL_BITMAP.GetSize() self.GRAY_BRUSH = wx.Brush("WHEAT", wx.TRANSPARENT) self.GRAY_PEN = wx.Pen(GRAY) #editor self.SetDefaultEditor(gridlib.GridCellTextEditor()) #drop self.SetAsFileDropTarget(self, self.OnDrop) self.SetAsFileDropTarget(self.GetEmpty(), self.OnDrop) self.SetAsFileDropTarget(self.GetTopLevelParent(), self.OnDrop) #events self.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown) self.Bind(gridlib.EVT_GRID_CELL_CHANGE, self.OnGridCellChange) self.Bind(gridlib.EVT_GRID_CELL_LEFT_CLICK, self.OnGridCellLeftClick) self.Bind(gridlib.EVT_GRID_CELL_RIGHT_CLICK, self.OnGridCellRightClicked) self.Bind(gridlib.EVT_GRID_CMD_LABEL_RIGHT_CLICK, self.OnGridLabelRightClicked) self.Bind(gridlib.EVT_GRID_LABEL_LEFT_DCLICK, self.OnGridLabelLeftDclicked) self.GetGridRowLabelWindow().Bind(wx.EVT_PAINT, self.OnRowLabelPaint) self.GetGridColLabelWindow().Bind(wx.EVT_PAINT, self.OnColLabelPaint) #FIXME: logo might get corrupted #self.GetGridCornerLabelWindow().Bind(wx.EVT_PAINT, # self.OnCornerLabelPaint) self.Bind(gridlib.EVT_GRID_EDITOR_HIDDEN, self.OnGridEditorHidden)
def init_table(self): # set col title for idx, val in enumerate(self.columns): self.myGrid.SetColLabelValue(idx, val) self.current_lists = [] for row_id, row in self.df.iterrows(): self.myGrid.SetReadOnly(0, row_id, False) self.current_lists.append(row_id) for col_id, val in enumerate(self.columns): if self.df[val].dtype == 'object': self.myGrid.SetCellEditor(row_id, col_id, gridlib.GridCellTextEditor()) else: self.myGrid.SetCellEditor(row_id, col_id, gridlib.GridCellNumberEditor()) if str(row[val]) != 'nan': self.myGrid.SetCellValue(row_id, col_id, str(row[val])) else: self.myGrid.SetCellValue(row_id, col_id, "")
def __init__(self, parent, log): gridlib.Grid.__init__(self, parent, -1) ##mixins.GridAutoEditMixin.__init__(self) #打印log信息 self.log = log self.moveTo = None self.Bind(wx.EVT_IDLE, self.OnIdle) #创建一个25X25的电子表格 self.CreateGrid(25, 25) #, gridlib.Grid.SelectRows) ##self.EnableEditing(False) #simple cell formatting #设置第index=3列的宽度大小,像素=200 self.SetColSize(col=3, width=200) #设置第index=4行的高度大小,像素=45 self.SetRowSize(4, 45) #设置 row=0,col=0,value="First cell" self.SetCellValue(0, 0, "First cell") #设置 row=1,col=1,value="Another cell" self.SetCellValue(1, 1, "Another cell") #设置 row=2,col=2,value="Yet another cell" self.SetCellValue(2, 2, "Yet another cell") #设置 row=3,col=3,value="This cell is read-only" self.SetCellValue(3, 3, "This cell is read-only") #设置字体格式 self.SetCellFont( 0, 0, wx.Font(12, wx.FONTFAMILY_ROMAN, wx.FONTSTYLE_ITALIC, wx.FONTWEIGHT_NORMAL)) #设置字体颜色 self.SetCellTextColour(1, 1, wx.RED) #设置cell背景颜色 self.SetCellBackgroundColour(2, 2, wx.CYAN) #设置只读属性 self.SetReadOnly(3, 3, True) #设置 row=5,col=0,数字编辑器 self.SetCellEditor(5, 0, gridlib.GridCellNumberEditor(1, 1000)) #设置 row=5,col=0,value="123" self.SetCellValue(5, 0, "123") #设置 row=6,col=0,浮点数 self.SetCellEditor(6, 0, gridlib.GridCellFloatEditor()) #设置 row=6,col=0,value="123.34" self.SetCellValue(6, 0, "123.34") #设置 self.SetCellEditor(7, 0, gridlib.GridCellNumberEditor()) #设置 row=6,col=3,value="You can veto editing this cell" self.SetCellValue(6, 3, "You can veto editing this cell") #self.SetRowLabelSize(0) #self.SetColLabelSize(0) # attribute objects let you keep a set of formatting values # in one spot, and reuse them if needed #wx.grid.GridCellAttr #这个类可以用来通过改变它们的默认属性来改变网格在网格中的外观。 attr = gridlib.GridCellAttr() #字体颜色:黑色 attr.SetTextColour(wx.BLACK) #设置背景颜色:红色 attr.SetBackgroundColour(wx.RED) #设置字体格式 attr.SetFont( wx.Font(10, wx.FONTFAMILY_SWISS, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD)) # you can set cell attributes for the whole row (or column) #设置Row=5,attr self.SetRowAttr(5, attr) #设置Col=0,LableValue =Custom self.SetColLabelValue(0, "Custom") self.SetRowLabelValue(0, "日期") #设置Col=1,LabelValue = "column" self.SetColLabelValue(1, "column") #设置Col=2,LabelValue = labels self.SetColLabelValue(2, "labels") #设置列表标签左右以及上下对齐方式:左对齐,下沉 self.SetColLabelAlignment(wx.ALIGN_LEFT, wx.ALIGN_BOTTOM) #self.SetDefaultCellOverflow(False) #r = gridlib.GridCellAutoWrapStringRenderer() #self.SetCellRenderer(9, 1, r) #overflow cells self.SetCellValue( 9, 1, "This default cell will overflow into neighboring cells, but not if you turn overflow off." ) #单元格合并处理:3x3 self.SetCellSize(11, 1, 3, 3) #设置单元格对齐方式:中间,中间 self.SetCellAlignment(11, 1, wx.ALIGN_CENTRE, wx.ALIGN_CENTRE) #设置单元格值 self.SetCellValue(11, 1, "This cell is set to span 3 rows and 3 columns") #设置 editor = gridlib.GridCellTextEditor() #值长度 editor.SetParameters('10') #设置格式 self.SetCellEditor(0, 4, editor) #设置值 self.SetCellValue(0, 4, "Limited text") #可以用来格式化单元格中的字符串数据。 renderer = gridlib.GridCellAutoWrapStringRenderer() self.SetCellRenderer(15, 0, renderer) self.SetCellValue( 15, 0, "The text in this cell will be rendered with word-wrapping") # test all the events #左单击 self.Bind(gridlib.EVT_GRID_CELL_LEFT_CLICK, self.OnCellLeftClick) #右单击 self.Bind(gridlib.EVT_GRID_CELL_RIGHT_CLICK, self.OnCellRightClick) #左双击 self.Bind(gridlib.EVT_GRID_CELL_LEFT_DCLICK, self.OnCellLeftDClick) #右双击 self.Bind(gridlib.EVT_GRID_CELL_RIGHT_DCLICK, self.OnCellRightDClick) #label 左单击 self.Bind(gridlib.EVT_GRID_LABEL_LEFT_CLICK, self.OnLabelLeftClick) #label 右单击 self.Bind(gridlib.EVT_GRID_LABEL_RIGHT_CLICK, self.OnLabelRightClick) #label 左双击 self.Bind(gridlib.EVT_GRID_LABEL_LEFT_DCLICK, self.OnLabelLeftDClick) #label 右双击 self.Bind(gridlib.EVT_GRID_LABEL_RIGHT_DCLICK, self.OnLabelRightDClick) self.Bind(gridlib.EVT_GRID_COL_SORT, self.OnGridColSort) #拖动Row大小 self.Bind(gridlib.EVT_GRID_ROW_SIZE, self.OnRowSize) #拖动Col大小 self.Bind(gridlib.EVT_GRID_COL_SIZE, self.OnColSize) self.Bind(gridlib.EVT_GRID_RANGE_SELECT, self.OnRangeSelect) self.Bind(gridlib.EVT_GRID_CELL_CHANGED, self.OnCellChange) self.Bind(gridlib.EVT_GRID_SELECT_CELL, self.OnSelectCell) self.Bind(gridlib.EVT_GRID_EDITOR_SHOWN, self.OnEditorShown) self.Bind(gridlib.EVT_GRID_EDITOR_HIDDEN, self.OnEditorHidden) self.Bind(gridlib.EVT_GRID_EDITOR_CREATED, self.OnEditorCreated)
def __init__(self, parent, log): gridlib.Grid.__init__(self, parent, -1) ##mixins.GridAutoEditMixin.__init__(self) self.log = log self.moveTo = None self.Bind(wx.EVT_IDLE, self.OnIdle) self.CreateGrid(25, 25)#, gridlib.Grid.SelectRows) ##self.EnableEditing(False) # simple cell formatting self.SetColSize(3, 200) self.SetRowSize(4, 45) self.SetCellValue(0, 0, "First cell") self.SetCellValue(1, 1, "Another cell") self.SetCellValue(2, 2, "Yet another cell") self.SetCellValue(3, 3, "This cell is read-only") self.SetCellFont(0, 0, wx.Font(12, wx.ROMAN, wx.ITALIC, wx.NORMAL)) self.SetCellTextColour(1, 1, wx.RED) self.SetCellBackgroundColour(2, 2, wx.CYAN) self.SetReadOnly(3, 3, True) self.SetCellEditor(5, 0, gridlib.GridCellNumberEditor(1,1000)) self.SetCellValue(5, 0, "123") self.SetCellEditor(6, 0, gridlib.GridCellFloatEditor()) self.SetCellValue(6, 0, "123.34") self.SetCellEditor(7, 0, gridlib.GridCellNumberEditor()) self.SetCellValue(6, 3, "You can veto editing this cell") #self.SetRowLabelSize(0) #self.SetColLabelSize(0) # attribute objects let you keep a set of formatting values # in one spot, and reuse them if needed attr = gridlib.GridCellAttr() attr.SetTextColour(wx.BLACK) attr.SetBackgroundColour(wx.RED) attr.SetFont(wx.Font(10, wx.SWISS, wx.NORMAL, wx.BOLD)) # you can set cell attributes for the whole row (or column) self.SetRowAttr(5, attr) self.SetColLabelValue(0, "Custom") self.SetColLabelValue(1, "column") self.SetColLabelValue(2, "labels") self.SetColLabelAlignment(wx.ALIGN_LEFT, wx.ALIGN_BOTTOM) #self.SetDefaultCellOverflow(False) #r = gridlib.GridCellAutoWrapStringRenderer() #self.SetCellRenderer(9, 1, r) # overflow cells self.SetCellValue( 9, 1, "This default cell will overflow into neighboring cells, but not if you turn overflow off."); self.SetCellSize(11, 1, 3, 3); self.SetCellAlignment(11, 1, wx.ALIGN_CENTRE, wx.ALIGN_CENTRE); self.SetCellValue(11, 1, "This cell is set to span 3 rows and 3 columns"); editor = gridlib.GridCellTextEditor() editor.SetParameters('10') self.SetCellEditor(0, 4, editor) self.SetCellValue(0, 4, "Limited text") renderer = gridlib.GridCellAutoWrapStringRenderer() self.SetCellRenderer(15,0, renderer) self.SetCellValue(15,0, "The text in this cell will be rendered with word-wrapping") # test all the events self.Bind(gridlib.EVT_GRID_CELL_LEFT_CLICK, self.OnCellLeftClick) self.Bind(gridlib.EVT_GRID_CELL_RIGHT_CLICK, self.OnCellRightClick) self.Bind(gridlib.EVT_GRID_CELL_LEFT_DCLICK, self.OnCellLeftDClick) self.Bind(gridlib.EVT_GRID_CELL_RIGHT_DCLICK, self.OnCellRightDClick) self.Bind(gridlib.EVT_GRID_LABEL_LEFT_CLICK, self.OnLabelLeftClick) self.Bind(gridlib.EVT_GRID_LABEL_RIGHT_CLICK, self.OnLabelRightClick) self.Bind(gridlib.EVT_GRID_LABEL_LEFT_DCLICK, self.OnLabelLeftDClick) self.Bind(gridlib.EVT_GRID_LABEL_RIGHT_DCLICK, self.OnLabelRightDClick) self.Bind(gridlib.EVT_GRID_ROW_SIZE, self.OnRowSize) self.Bind(gridlib.EVT_GRID_COL_SIZE, self.OnColSize) self.Bind(gridlib.EVT_GRID_RANGE_SELECT, self.OnRangeSelect) self.Bind(gridlib.EVT_GRID_CELL_CHANGE, self.OnCellChange) self.Bind(gridlib.EVT_GRID_SELECT_CELL, self.OnSelectCell) self.Bind(gridlib.EVT_GRID_EDITOR_SHOWN, self.OnEditorShown) self.Bind(gridlib.EVT_GRID_EDITOR_HIDDEN, self.OnEditorHidden) self.Bind(gridlib.EVT_GRID_EDITOR_CREATED, self.OnEditorCreated)
def editor(self): return gridlib.GridCellTextEditor()
def __init__(self, parent): gridlib.Grid.__init__(self, parent, -1, size=(200, 200), style=wx.WANTS_CHARS) self.moveTo = None self.listeValeurs = champs self.dictCategories = categories self.dictValeurs = {} self.Bind(wx.EVT_IDLE, self.OnIdle) # Création de la grille nbreLignes = len(self.listeValeurs) + len(self.dictCategories) self.CreateGrid(nbreLignes, 2) self.SetColSize(0, 240) self.SetColSize(1, 250) self.SetColLabelValue(0, "") self.SetColLabelValue(1, "") self.SetRowLabelSize(1) self.SetColLabelSize(1) # Remplissage avec les données IDcategorieEnCours = 0 key = 0 for valeurs in self.listeValeurs : # Récupération des valeurs code = valeurs[0] label = valeurs[1] + " :" type = valeurs[2] IDcategorie = valeurs[3] valeur = valeurs[4] sauvegarde = valeurs[5] controles = valeurs[6] # Indique que la valeur sera sauvegardée if sauvegarde == True : label = label[:-2] + " * :" if IDcategorieEnCours != IDcategorie : # Création d'une ligne CATEGORIE IDcategorieEnCours = IDcategorie self.SetRowLabelValue(key, "") self.SetCellValue(key, 0, self.dictCategories[IDcategorie]) self.SetCellFont(key, 0, wx.Font(8, wx.DEFAULT , wx.NORMAL, wx.BOLD)) self.SetCellBackgroundColour(key, 0, "#C5DDFA") self.SetReadOnly(key, 0, True) self.SetCellAlignment(key, 0, wx.ALIGN_LEFT, wx.ALIGN_CENTRE) self.SetCellValue(key, 1, "") self.SetCellBackgroundColour(key, 1, "#C5DDFA") self.SetReadOnly(key, 1, True) # Mémorisation dans le dictionnaire des données self.dictValeurs[key] = valeurs key += 1 # Création d'une ligne de données # Entete de ligne self.SetRowLabelValue(key, "") # Création de la cellule LABEL self.SetCellValue(key, 0, label) self.SetCellBackgroundColour(key, 0, "#EEF4FB") self.SetReadOnly(key, 0, True) self.SetCellAlignment(key, 0, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE) # Création de la cellule VALEUR if type == "texte" : nbreCaract = controles[-1][1] editor = gridlib.GridCellTextEditor() editor.SetParameters(str(nbreCaract)) self.SetCellEditor(key, 1, editor) self.SetCellValue(key, 1, valeur[:nbreCaract]) if type == "radio" : listeDonnees = [] for controle in controles : listeDonnees.append(controle[0]) editor = gridlib.GridCellChoiceEditor( listeDonnees , False) self.SetCellEditor(key, 1, editor) self.SetCellValue(key, 1, valeur) # Mémorisation dans le dictionnaire des données self.dictValeurs[key] = valeurs key += 1 # test all the events if 'phoenix' in wx.PlatformInfo: self.Bind(gridlib.EVT_GRID_CELL_CHANGED, self.OnCellChange) else : self.Bind(gridlib.EVT_GRID_CELL_CHANGE, self.OnCellChange) self.moveTo = (1, 1)