Найти - Пользователи
Полная версия: wx.Python PyGridTableBase Как запихать в него данные?
Начало » Базы данных » wx.Python PyGridTableBase Как запихать в него данные?
1 2 3 4
FoxPython
Viper
__init__ является целиком и полностью принадлежностью класса, а self указывает на обьект этого класса.
А зачем селфу указывать на объект этого класса?
Ведь мои а и b и без инита, тоже станут параметрами каждого вновь создаваемого объекта из нарисованного мною класса.
Т.е. и в том и в другом случае можно сделать так:

tmp1=MyClass()
tmp1.a=12
tmp1.b=55

Зачем иниту self передавать, ни фига не врубаюсь я. Понимаю ещё передать его какой-нибудь совсем левой процедуре, которая не входит в состав данного класса.
Читал-читал учебник по питону по этому поводу, всё равно, ничего не понял. Я тупой, однако.

——————————————————————-
PooH
Лучше для работы с базой воспользоваться каким-нибудь готовым ОРМ, например SQLObject или SQLAlchemy
PooH
А здесь поможет lazy loading в ОРМ для больших полей.
Ой мама родная, а это чего за алхимия? Ещё чего-то изучать?
Я хочу как в фокспро: вот язык-среда разработки, ВСЁ больше ничего не надо! Программируй - не хочу! База сама в таблицу запихивается, редактируемые ячейки сами в базе запоминаются. Вот такой я хочу конструктор… (это нытьё! Обращать внимание не рекомендуется. Лучше отвечать по существу и тематике форума :) )
Nbush
FoxPython
Я хочу как в фокспро: вот язык-среда разработки, ВСЁ больше ничего не надо! Программируй - не хочу! База сама в таблицу запихивается, редактируемые ячейки сами в базе запоминаются. Вот такой я хочу конструктор…
Вот и такой (почти ) конструктор есть :) DABO http://dabodev.com/ называется, кстати разработчики Microsoft Visual FoxPro писали (Ed Leafe and Paul McNett).
FoxPython
Ой, наконец-то я врубился для чего нужен self. Махом избавился почти от всех глобальных переменных, кроме одной. Переменная-подключение к базе данных осталась глобальной.
n2b
как сделать чтобы в гриде ячейка сама расширялась по размерам информации в ней?
n2b
Ответ: myGrid.AutoSize()
n2b
Помогите пожалуйста сделать имена колонок.
Все колонки получил селектом:
select t.COLUMN_ID, t.COLUMN_NAME from all_tab_columns t where t.TABLE_NAME='TABLE'
order by t.COLUMN_ID
Получаю я их вот в таком виде:

[(1, 'EMPLOYEE_ID'), (2, 'START_DATE'), (3, 'END_DATE'), (4, 'JOB_ID'), (5, 'DEPARTMENT_ID')]
Как мне теперь их засунуть в грид?

Грид такого плана:
class GridTable(wx.grid.PyGridTableBase):
def __init__(self, dannie):
wx.grid.PyGridTableBase.__init__(self)
self.dannie=dannie
def GetNumberRows(self):
return len(self.dannie)
pass
def GetNumberCols(self):
return len(self.dannie[0])
pass

def GetColLabelValue(self, col):
self.Table = data_info.data_info().Get_Table()
connection = data_info.data_info().connection
cursor = cx_Oracle.Cursor(connection)
sql = ("select t.COLUMN_ID, t.COLUMN_NAME from all_tab_columns t where t.TABLE_NAME=\'%s\'order by t.COLUMN_ID") % (self.Table)
cursor.execute(sql)
cuu=cursor.fetchall()
data = [i[0] for i in cuu]
print sql
print cuu
print data
return cuu

def IsEmptyCell(self, row, col):
return self.dannie[row] [col] is not None
pass
def GetValue(self, row, col):
value = self.dannie[row] [col]
if value is not None:
return value
else:
return ''
pass
def SetValue(self, row, col, value):
self.dannie[row][col]=value
pass
PooH
Как-то наподобии такого
class GridTable(wx.grid.PyGridTableBase):
def __init__(self, dannie):
wx.grid.PyGridTableBase.__init__(self)
self.dannie=dannie
self.Table = data_info.data_info().Get_Table()
connection = data_info.data_info().connection
cursor = cx_Oracle.Cursor(connection)
sql = ("select t.COLUMN_NAME from all_tab_columns t where t.TABLE_NAME=\'%s\'order by t.COLUMN_ID") % (self.Table)
cursor.execute(sql)
cuu=cursor.fetchall()
self.col_names = [i[0] for i in cuu]

def GetColLabelValue(self, col):
self.col_names[col]
n2b
self.col_names = [i for i in cuu]

это мне выдает бред на подобии этого:



ADDED LATER:

Работает вот так - self.col_names = [i for i in cuu]
n2b
Всё работает, только вот если значение ячейки пустое, то грид её просто не показывает, а нужно чтобы показывал. Небольшое добавление: не показывает когда ВСЯ строка пустая, т.е. на строке с id=5(как пример) все значения колонок пустые то он ее просто не показывает.

def GetValue(self, row, col):
value = self.dannie[row] [col]
if value is not None:
return value
else:
return ''
pass
Вот этот кусок отвечает за заполнение ячеек, как я понимаю. Помогите изменить..


И еще, если таблица ОЧЕНЬ большая (около 400 тысяч записей), то он либо её не полностью загрузит(не все колонки, а только 2 например(или это просто не видно остальных)) и еще совсем нет скролла.

Как сделать нормальный скролл по вертикали и по горизонтали?

Самое интересное что скролл есть, если таблица маленькая, а если очень большая то нормальных скролов нет.
PooH
Я прокручивал строки через буфер. Вот из какого-то старого проекта, использовался sqlalchemy
http://pastebin.com/gaZULTCm
ЗЫ: возможно здесь расчет нового положения буфера с багом, но другого кода у меня не сохранилось
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