Динамически добавлять или удалять элементы из списка и дерева в pygtk и быстро (поляна)

Я пытаюсь создать мини-CRM-приложение на python, используя gtk(pygtk), glade, и начал разрабатывать его с помощью быстрого (что здорово).

Я создал несколько диалогов и добавил просмотр списка в GUI, используя glade), но когда я пытаюсь добавить некоторые элементы в список динамически, из скрипта, который быстро создал glade, чтобы приложение показывало некоторые данные пользователю, вызвавшему MySql (если есть другая опция, я буду рад здесь о..) вместо этого он показывает много ошибок (в терминале).

Я искал некоторые учебные пособия, но все, что я нашел, это только статьи, которые объясняют, как создать список с нуля (не используя быстро, и поляна).

Вот код:

Это applicationWindow.py, который быстро создается

Я добавил базовый код для диалоговых окон кнопок и так...

import gettext
from gettext import gettext as _
gettext.textdomain('ubuntucrm')

from gi.repository import Gtk # pylint: disable=E0611
import logging
logger = logging.getLogger('ubuntucrm')

from ubuntucrm_lib import Window
from ubuntucrm.AboutUbuntucrmDialog import AboutUbuntucrmDialog
from ubuntucrm.PreferencesUbuntucrmDialog import PreferencesUbuntucrmDialog
from ubuntucrm.PopupcalendarDialog import PopupcalendarDialog
from ubuntucrm.NewcustomerDialog import NewcustomerDialog
from ubuntucrm.GlobalsearchDialog import GlobalsearchDialog

# See ubuntucrm_lib.Window.py for more details about how this class works
class UbuntucrmWindow(Window):
    __gtype_name__ = "UbuntucrmWindow"

def finish_initializing(self, builder): # pylint: disable=E1002
    """Set up the main window"""
    super(UbuntucrmWindow, self).finish_initializing(builder)

    self.AboutDialog = AboutUbuntucrmDialog
    self.PreferencesDialog = PreferencesUbuntucrmDialog
    #self.PopupcalendarDialog = PopupcalendarDialog

    # Code for other initialization actions should be added here.

    self.CalendarButton = self.builder.get_object("CalendarButton")
    self.contactsButton = self.builder.get_object("contactsButton")
    self.productsButton = self.builder.get_object("productsButton")
    self.OtherButton    = self.builder.get_object("OtherButton")

    #dialogs
    self.cal = PopupcalendarDialog()
    self.contactsDialog = NewcustomerDialog()
    self.globalsearcher = GlobalsearchDialog()

    #lists and modelers
    self.leftTree    = self.builder.get_object("leftTreeview")
    self.treeModeler = self.builder.get_object("liststorer1")


    #functions
def on_OtherButton_clicked(self, widget):
    print "you clicked OtherButton"

// здесь я попробовал что-то вроде:

    self.treeModeler.append(["bla bla","some text"])

// например, "бла бла", загруженный из базы данных MySQL.

def on_productsButton_clicked(self, widget):
    print "you clicked producs button" 
    self.globalsearcher.run()


def on_contactsButton_clicked(self, widget):
    print "you clicked contactButton "
    self.contactsDialog.run()


def on_CalendarButton_clicked(self, widget):
    print "calling to calendar button"
    self.cal.run()

Ошибка:

 (ubuntucrm:10443): Gtk-CRITICAL **: gtk_list_store_get_value: assertion `column < priv->n_columns' failed

и порядок неверный


| некоторый текст | бла бла |


вместо:


| бла бла | некоторый текст |


2 ответа

Решение

Всегда предоставляйте полную обратную трассировку и дополнительные предупреждения / вывод. Тем не менее, ваша проблема в следующей строке кода:

    self.treeModeler.append("bla bla")

Вы должны предоставить список элементов, который соответствует столбцам в Gtk.TreeModel, Поэтому, если ваша модель имеет только 1 строковый столбец, просто заключите несколько скобок в строку:

    self.treeModeler.append(["bla bla"])

У вас есть больше столбцов с разными типами? Укажите их в своем списке:

    self.treeModeler.append(["bla bla", 1234, False, 1.234, GdkPixbuf.Pixbuf, None])

Изменить для редактирования: Помните, что вы добавляете значения в Gtk.TreeModel столбцы, а не Gtk.TreeView колонны. Посмотрите мои скриншоты в этом ответе и убедитесь, что вы нанесли на карту каждый Gtk.TreeModel столбец к правильному Gtk.CellRendererText,

Я получил эту ошибку, когда у меня был GtkCellRendererText text атрибут установлен в нулевой индекс для столбца, который не существует.

Другие вопросы по тегам