Adicione ou remova dinamicamente itens da lista e da árvore no pygtk e rapidamente (glade)

2

Eu estou tentando fazer alguns mini aplicativos CRM em python usando gtk (pygtk), glade e comecei a desenvolvê-lo usando rapidamente (o que é incrível).

Eu criei alguns diálogos e adicionei listview ao GUI usando o glade) mas quando eu tentei adicionar alguns itens à lista dinamicamente, do script que glade \ rapidamente criado para que o aplicativo mostre alguns dados para o usuário que chamado do MySql (se houver outra opção, eu ficaria feliz em saber sobre isso aqui). Ele mostra muitos erros (no terminal).

Eu procurei por alguns tutoriais, mas tudo que eu encontrei são apenas tuts que explicam como criar a lista a partir do zero (não usando rapidamente e glade).

Aqui está o código:

Este é o applicationWindow.py criado rapidamente

Adicionei o código básico para os diálogos dos botões e, assim ...

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"

// aqui eu tentei algo como:

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

// por exemplo, "bla bla" carregado de algum banco de dados 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()

O erro é:

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

e o pedido está incorreto

| algum texto | bla bla |

em vez de:

| bla bla | algum texto |

por usher 04.09.2012 / 08:42

2 respostas

0

Sempre forneça o rastreamento completo e avisos / saídas adicionais. Dito isso, seu problema está na seguinte linha de código:

    self.treeModeler.append("bla bla")

Você deve fornecer uma lista de itens que corresponda às colunas no Gtk.TreeModel . Então, se seu modelo tiver apenas uma coluna de string, coloque alguns colchetes ao redor da string:

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

Você tem mais colunas com tipos diferentes? Forneça-os em sua lista:

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

Editar na sua edição : lembre-se de adicionar valores às colunas Gtk.TreeModel , não Gtk.TreeView . Veja minhas imagens em esta resposta e faça Certifique-se de ter mapeado cada coluna Gtk.TreeModel para o Gtk.CellRendererText correto.

    
por Timo 05.09.2012 / 00:06
0

Eu recebi esse erro quando tinha o atributo GtkCellRendererText text definido como um índice baseado em zero em uma coluna que não existia.

    
por ThorSummoner 07.08.2014 / 08:30