Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 19, 2008 13:24:22

hellslade
От:
Зарегистрирован: 2008-01-28
Сообщения: 240
Репутация: +  0  -
Профиль   Отправить e-mail  

wx.grid.PyGridTableBase

есть проблема в том, что грид не хочет менять количество строк. т.е. первый раз он выставляет нужное количество строк, а потом не меняет.
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()



Офлайн

#2 Июнь 19, 2008 14:10:10

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

wx.grid.PyGridTableBase

Ну сколько уже можно! :) ну учитесь уже поиском пользоваться!
я уже давно приводил пример http://python.com.ua/forum/viewtopic.php?pid=9242#p9242



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#3 Июнь 20, 2008 08:18:06

hellslade
От:
Зарегистрирован: 2008-01-28
Сообщения: 240
Репутация: +  0  -
Профиль   Отправить e-mail  

wx.grid.PyGridTableBase

PooH
на самом деле я смотрел ваш пример, вот только сразу не заметил нужную мне вещь :) извеняюсь, спасибо что тыкнули )) помогло!



Офлайн

#4 Дек. 12, 2022 21:38:39

dimit
Зарегистрирован: 2022-12-12
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

wx.grid.PyGridTableBase

PooH к сожалению Ваша ссылка наверно устарела, как пример и не знаю
очень много устаревшего кода в инете , а примера, именно по изменению размера сетки созданной как SetTable, не могу найти сам ни как не соображу…
Может быть кто поможет ссылкой или примером?

Офлайн

#5 Дек. 13, 2022 00:17:51

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9716
Репутация: +  842  -
Профиль   Отправить e-mail  

wx.grid.PyGridTableBase

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.



Отредактировано py.user.next (Дек. 13, 2022 00:18:06)

Офлайн

#6 Дек. 13, 2022 15:44:34

dimit
Зарегистрирован: 2022-12-12
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

wx.grid.PyGridTableBase

py.user.next спасибо за ссылку, немного стало понятнее.
ещё скачал демо wxpython, нашёл там рабочий пример почти со всеми функциями Grid_MegaExample.py.
всё это продвинет работу значительно.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version