Уведомления

Jabber-конференция сообщества: pythonua@conference.jabber.ru

#1 Апрель 11, 2007 20:39:47

astoon
От:
Зарегистрирован: 2007-04-09
Сообщения: 335
Репутация: +  2  -
Профиль   Отправить e-mail  

Обновление TreeView в PyGTK

Здравствуйте !
При запуске приложения список self.db.list заполняется значениями из базы данных
и выводится в TreeView кодом следующего вида:
model = gtk.ListStore(str)

for item in self.db.list:
iter = model.append()
model.set(iter, 0, item)

treeview = gtk.TreeView(model)

render = gtk.CellRendererText()
tvcolumn = gtk.TreeViewColumn('My listing', render, text=0)

treeview.append_column(tvcolumn)
treeview.set_search_column(0)
Добавление элементов в список self.db.list производится диалогом:
def new_item(self, action):
dialog = gtk.Dialog('Create new item', self, 0,
(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
gtk.STOCK_OK, gtk.RESPONSE_OK))

dialog.connect('response', lambda d, r: d.destroy())
dialog.set_default_size(400, 100)

label = gtk.Label('Enter new item')
dialog.vbox.pack_start(label)

entry = gtk.Entry()
dialog.vbox.pack_start(entry)

dialog.show_all()

response = dialog.run()
self.db.CreateNewItem(entry.get_text())

dialog.destroy()
(где метод self.db.CreateNewItem() добавляет значения в self.db.list)

Как добиться, чтобы при закрытии диалогового окна TreeView обновилась ?

Подскажите, пожалуйста, хотя бы, как в принципе это принято делать, можно на словах.



Офлайн

#2 Апрель 12, 2007 10:08:04

slivlen
От:
Зарегистрирован: 2006-07-06
Сообщения: 764
Репутация: +  0  -
Профиль   Отправить e-mail  

Обновление TreeView в PyGTK

После self.db.CreateNewItem(entry.get_text()) вызови ф-цию, которая обновит TreeView.



Офлайн

#3 Апрель 13, 2007 16:00:16

astoon
От:
Зарегистрирован: 2007-04-09
Сообщения: 335
Репутация: +  2  -
Профиль   Отправить e-mail  

Обновление TreeView в PyGTK

Ясно.
Но какую функцию ?
Я наверное туплю, но если, предположим первый кусок кода (рисующий TreeView) выделить в отдельный метод
и вызывать в диалоге его, то, естесственно, в появляется еще один, новый TreeView(с обновленным списком), что связано с вызовом show() (ну или show_all()). :/
А если, show() не вызывать, тогда ничего не обновляется …
Help.



Офлайн

#4 Апрель 13, 2007 16:24:09

slivlen
От:
Зарегистрирован: 2006-07-06
Сообщения: 764
Репутация: +  0  -
Профиль   Отправить e-mail  

Обновление TreeView в PyGTK

Зачем делать еще один TreeView? Обнови его модель и все. Все само пререрисуется потом.



Офлайн

#5 Апрель 13, 2007 20:21:24

astoon
От:
Зарегистрирован: 2007-04-09
Сообщения: 335
Репутация: +  2  -
Профиль   Отправить e-mail  

Обновление TreeView в PyGTK

Блин, точно же - модель ! :)
Спасибо, slivlen !



Офлайн

#6 Апрель 20, 2007 10:01:29

astoon
От:
Зарегистрирован: 2007-04-09
Сообщения: 335
Репутация: +  2  -
Профиль   Отправить e-mail  

Обновление TreeView в PyGTK

Для тех, кто будет в будущем интересоваться, оставляю решение:
Вот этот кусок:

for item in self.db.list:
iter = model.append()
model.set(iter, 0, item)
выделяем в отдельную функцию.
Ее и вызываем перед закрытием диалога.
Единственное что нужно не забыть, это добавить в начало вновь созданной функции
метод clear() для объекта класса gtk.ListStore, иначе при добавлении нового значения
в список результат будет смешным… :)

И еще, для того, чтобы правильно работали кнопки “отменить” и “окей”, нужно:
-убрать в диалоге строчку
dialog.connect('response', lambda d, r: d.destroy()),
она, оказывается, лишняя,
-вызов функции self.db.CreateNewItem(entry.get_text()) и функции обновления модели
делать по условию
if response == gtk.RESPONSE_OK:

Вроде все.



Отредактировано (Апрель 20, 2007 12:04:36)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version