Найти - Пользователи
Полная версия: wx.grid.PyGridTableBase
Начало » GUI » wx.grid.PyGridTableBase
1
hellslade
есть проблема в том, что грид не хочет менять количество строк. т.е. первый раз он выставляет нужное количество строк, а потом не меняет.
PyGridTableBase меняет количество строк, но сама сетка не хочет их видеть. видимо нужно как-то принудительно грид обновить, но я не нашел как. пробовал update, но не помогло.
кто нить с таким сталкивался?

# -*- coding:cp1251 -*-
import wx
import wx.grid
class ShtrafTable(wx.grid.PyGridTableBase):
    def __init__(self, header,data):
        wx.grid.PyGridTableBase.__init__(self)
        self.data  = data
        self.header= header
        
    def GetNumberRows(self):
        return len(self.data)
    def GetNumberCols(self):
        return len(self.header)
    def IsEmptyCell(self, row, col):
        if row < len(self.data):
            return False
        else:
            return True
    def GetValue(self, row, col):
        if row < len(self.data):
            return str( self.data[row][col+1])
        else:
            return ''
    def GetColLabelValue(self,col):
        if col <= len(self.header):
            return self.header[col]
        else :
            return 'Не определено'
    def ReSet(self,data):
        self.data=data
        self.GetNumberRows()
    def GetData(self):
        return self.data
class ShtrafTableGrid(wx.grid.Grid):
    def __init__(self, parent, header,data):
        wx.grid.Grid.__init__(self, parent, -1)
        self.table = ShtrafTable(header,data)
        self.parent=parent
        self.SetTable(self.table, True)
        self.DisableCellEditControl()
        self.EnableEditing(False)
        self.HideCellEditControl()
    def DeleteRows(self,pos,numRows):
        pass
    def AppendRows(self,pos,numRows):
        pass
    def ReSet(self,data):
        self.ClearSelection() # Очистить выбор.
        self.table.ReSet(data)
        self.DeleteRows(0,self.GetNumberRows())
        self.AppendRows(0,len(data))
        self.ForceRefresh()
    def GetData(self):
        return self.table.GetData()
class TestFrame(wx.Frame):
    def __init__(self, parent):
        wx.Frame.__init__(self, parent, -1, "Test", size=(500, 400))
        self.panel = wx.Panel(self)
        sizer = wx.BoxSizer(wx.VERTICAL)
        self.bp = wx.Panel(self.panel)
        self.but = wx.Button(self.bp, -1, label='Update')
        wx.EVT_BUTTON(self, self.but.GetId(), self.OnUpdate)
        sizer.Add(self.bp, proportion=0, flag=wx.EXPAND|wx.ALL, border=5)
        data = (
            (0,'dfg-1','dfg-2','dgdg-3'),
            (0,'dfg-1','dfg-2','dgdg-3'),
            (0,'dfg-1','dfg-2','dgdg-3'),
            (0,'dfg-1','dfg-2','dgdg-3'),
            (0,'dfg-1','dfg-2','dgdg-3'),
            (0,'dfg-1','dfg-2','dgdg-3'),
                )
        self.grid = ShtrafTableGrid(self.panel, ['столбец1','столбец2','столбец3'], data)
        sizer.Add(self.grid, proportion=1, flag=wx.EXPAND|wx.ALL, border=5)
        self.panel.SetSizer(sizer)
    def OnUpdate(self, evt):
        data = (
            (0,'dfg-1','dfg-2','dgdg-3'),
            (0,'dfg-1','dfg-2','dgdg-3'),
                )
        self.grid.ReSet(data)
if __name__ == '__main__':
    app = wx.PySimpleApp()
    frame = TestFrame(None)
    frame.Show(True)
    app.MainLoop()
PooH
Ну сколько уже можно! :) ну учитесь уже поиском пользоваться!
я уже давно приводил пример http://python.com.ua/forum/viewtopic.php?pid=9242#p9242
hellslade
PooH
на самом деле я смотрел ваш пример, вот только сразу не заметил нужную мне вещь :) извеняюсь, спасибо что тыкнули )) помогло!
dimit
PooH к сожалению Ваша ссылка наверно устарела, как пример и не знаю
очень много устаревшего кода в инете , а примера, именно по изменению размера сетки созданной как SetTable, не могу найти сам ни как не соображу…
Может быть кто поможет ссылкой или примером?
py.user.next
dimit
а примера, именно по изменению размера сетки созданной как SetTable, не могу найти
Ты прочитал страницу про wxGrid?
https://wiki.wxpython.org/wxGrid

Там пример есть в секции Changing Size/Shape of Grid/Table.

Также там есть всякие заметки типа этой
Note: you can only call SetTable once for any given wxGrid. Because of this, it is generally necessary to have your wxPyGridTableBase class alter the grid's size and shape to reflect any changes in your table's dimensions. See wxGrid Size/Shape Management below for details.
dimit
py.user.next спасибо за ссылку, немного стало понятнее.
ещё скачал демо wxpython, нашёл там рабочий пример почти со всеми функциями Grid_MegaExample.py.
всё это продвинет работу значительно.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB