web-dev-qa-db-fra.com

Ajoutez ou supprimez dynamiquement des éléments de la liste et de l'arborescence dans pygtk et rapidement (clairière)

J'essaie de créer une mini application CRM en python en utilisant gtk (pygtk), glade et j'ai commencé à la développer en utilisant rapidement (ce qui est génial).

J'ai créé des boîtes de dialogue et ajouté listview à l'interface graphique à l'aide de glade) mais lorsque j'essaie d'ajouter dynamiquement des éléments à la liste, à partir du script que glade\a créé rapidement afin que l'application affiche des données à l'utilisateur qui a appelé depuis MySql (s'il y a une autre option que je ne serai pas content ici ..), elle affiche plutôt beaucoup d'erreurs (dans le terminal).

J'ai cherché quelques tutoriels mais tout ce que j'ai trouvé n'est que des tuts qui expliquent comment créer la liste à partir de zéro (ne pas utiliser rapidement et clairvoyance).

Voici le code:

Il s'agit du fichier applicationWindow.py créé par rapidement

J'ai ajouté du code de base pour les boîtes de dialogue des boutons et ainsi ...

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_= "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"

// ici j'ai essayé quelque chose comme:

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

// par exemple, "bla bla" chargé à partir d'une base de données 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()

L'erreur est:

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

et la commande est incorrecte


| du texte | bla bla |


au lieu de:


| bla bla | du texte |


2
usher

Fournissez toujours le traçage complet et les avertissements/sorties supplémentaires. Cela dit, votre problème se situe dans la ligne de code suivante:

    self.treeModeler.append("bla bla")

Vous devez fournir une liste d'éléments correspondant aux colonnes de la Gtk.TreeModel. Donc, si votre modèle n'a qu'une colonne de chaîne, mettez simplement des crochets autour de votre chaîne:

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

Avez-vous plus de colonnes avec différents types? Indiquez-les dans votre liste:

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

Modifier dans votre modification : N'oubliez pas que vous ajoutez des valeurs à Gtk.TreeModel colonnes, pas Gtk.TreeView Colonnes. Voir mes captures d'écran dans cette réponse et assurez-vous d'avoir mappé chaque Gtk.TreeModel colonne à la bonne Gtk.CellRendererText.

0
Timo

J'ai eu cette erreur lorsque j'avais l'attribut GtkCellRendererText text défini sur un index de base zéro sur une colonne qui n'existait pas.

0
ThorSummoner