Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 25, 2007 17:50:02

FoxPython
От:
Зарегистрирован: 2007-09-15
Сообщения: 71
Репутация: +  0  -
Профиль   Отправить e-mail  

wx.Python PyGridTableBase Как запихать в него данные?

Viper
__init__ является целиком и полностью принадлежностью класса, а self указывает на обьект этого класса.
А зачем селфу указывать на объект этого класса?
Ведь мои а и b и без инита, тоже станут параметрами каждого вновь создаваемого объекта из нарисованного мною класса.
Т.е. и в том и в другом случае можно сделать так:

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

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

——————————————————————-
PooH
Лучше для работы с базой воспользоваться каким-нибудь готовым ОРМ, например SQLObject или SQLAlchemy
PooH
А здесь поможет lazy loading в ОРМ для больших полей.
Ой мама родная, а это чего за алхимия? Ещё чего-то изучать?
Я хочу как в фокспро: вот язык-среда разработки, ВСЁ больше ничего не надо! Программируй - не хочу! База сама в таблицу запихивается, редактируемые ячейки сами в базе запоминаются. Вот такой я хочу конструктор… (это нытьё! Обращать внимание не рекомендуется. Лучше отвечать по существу и тематике форума :) )



Офлайн

#2 Ноя. 26, 2007 08:38:04

Nbush
От:
Зарегистрирован: 2007-05-28
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

wx.Python PyGridTableBase Как запихать в него данные?

FoxPython
Я хочу как в фокспро: вот язык-среда разработки, ВСЁ больше ничего не надо! Программируй - не хочу! База сама в таблицу запихивается, редактируемые ячейки сами в базе запоминаются. Вот такой я хочу конструктор…
Вот и такой (почти ) конструктор есть :) DABO http://dabodev.com/ называется, кстати разработчики Microsoft Visual FoxPro писали (Ed Leafe and Paul McNett).



Офлайн

#3 Дек. 6, 2007 17:28:38

FoxPython
От:
Зарегистрирован: 2007-09-15
Сообщения: 71
Репутация: +  0  -
Профиль   Отправить e-mail  

wx.Python PyGridTableBase Как запихать в него данные?

Ой, наконец-то я врубился для чего нужен self. Махом избавился почти от всех глобальных переменных, кроме одной. Переменная-подключение к базе данных осталась глобальной.



Офлайн

#4 Окт. 19, 2011 13:30:37

n2b
От:
Зарегистрирован: 2011-02-10
Сообщения: 125
Репутация: +  0  -
Профиль   Отправить e-mail  

wx.Python PyGridTableBase Как запихать в него данные?

как сделать чтобы в гриде ячейка сама расширялась по размерам информации в ней?



Офлайн

#5 Окт. 31, 2011 12:06:49

n2b
От:
Зарегистрирован: 2011-02-10
Сообщения: 125
Репутация: +  0  -
Профиль   Отправить e-mail  

wx.Python PyGridTableBase Как запихать в него данные?

Ответ: myGrid.AutoSize()



Офлайн

#6 Ноя. 2, 2011 10:03:17

n2b
От:
Зарегистрирован: 2011-02-10
Сообщения: 125
Репутация: +  0  -
Профиль   Отправить e-mail  

wx.Python PyGridTableBase Как запихать в него данные?

Помогите пожалуйста сделать имена колонок.
Все колонки получил селектом:

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



Офлайн

#7 Ноя. 2, 2011 10:58:39

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

wx.Python PyGridTableBase Как запихать в него данные?

Как-то наподобии такого

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]



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

Отредактировано (Ноя. 2, 2011 11:04:45)

Офлайн

#8 Ноя. 2, 2011 12:22:26

n2b
От:
Зарегистрирован: 2011-02-10
Сообщения: 125
Репутация: +  0  -
Профиль   Отправить e-mail  

wx.Python PyGridTableBase Как запихать в него данные?

self.col_names = [i for i in cuu]

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



ADDED LATER:

Работает вот так - self.col_names = [i for i in cuu]



Отредактировано (Ноя. 2, 2011 12:26:50)

Офлайн

#9 Ноя. 2, 2011 17:06:12

n2b
От:
Зарегистрирован: 2011-02-10
Сообщения: 125
Репутация: +  0  -
Профиль   Отправить e-mail  

wx.Python PyGridTableBase Как запихать в него данные?

Всё работает, только вот если значение ячейки пустое, то грид её просто не показывает, а нужно чтобы показывал. Небольшое добавление: не показывает когда ВСЯ строка пустая, т.е. на строке с id=5(как пример) все значения колонок пустые то он ее просто не показывает.

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


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

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

Самое интересное что скролл есть, если таблица маленькая, а если очень большая то нормальных скролов нет.



Отредактировано (Ноя. 3, 2011 08:59:36)

Офлайн

#10 Ноя. 3, 2011 09:19:01

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

wx.Python PyGridTableBase Как запихать в него данные?

Я прокручивал строки через буфер. Вот из какого-то старого проекта, использовался sqlalchemy
http://pastebin.com/gaZULTCm
ЗЫ: возможно здесь расчет нового положения буфера с багом, но другого кода у меня не сохранилось



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

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version