Найти - Пользователи
Полная версия: Обновление TreeView в PyGTK
Начало » GUI » Обновление TreeView в PyGTK
1
astoon
Здравствуйте !
При запуске приложения список 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 обновилась ?

Подскажите, пожалуйста, хотя бы, как в принципе это принято делать, можно на словах.
slivlen
После self.db.CreateNewItem(entry.get_text()) вызови ф-цию, которая обновит TreeView.
astoon
Ясно.
Но какую функцию ?
Я наверное туплю, но если, предположим первый кусок кода (рисующий TreeView) выделить в отдельный метод
и вызывать в диалоге его, то, естесственно, в появляется еще один, новый TreeView(с обновленным списком), что связано с вызовом show() (ну или show_all()). :/
А если, show() не вызывать, тогда ничего не обновляется …
Help.
slivlen
Зачем делать еще один TreeView? Обнови его модель и все. Все само пререрисуется потом.
astoon
Блин, точно же - модель ! :)
Спасибо, slivlen !
astoon
Для тех, кто будет в будущем интересоваться, оставляю решение:
Вот этот кусок:
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:

Вроде все.
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