web-dev-qa-db-ja.com

gtkのリストとツリーから動的にアイテムを動的に追加または削除します(グレード)

私はpython gtk(pygtk)を使用して)いくつかのミニCRMアプリケーションを作成しようとしています。

私はいくつかのダイアログを作成し、gladeを使用してGUIにリストビューを追加しました)が、glade\quicklyに作成されたスクリプトから動的にリストにいくつかの項目を追加しようとすると、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データベースから読み込まれた「bla bla」。

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

順序が間違っている


|一部のテキスト| bla bla |


の代わりに:


| bla bla |テキスト|


2
usher

常に完全なトレースバックと追加の警告/出力を提供します。つまり、問題は次のコード行にあります。

    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にマップしたことを確認してください。

0
Timo

GtkCellRendererText text属性を、存在しない列のゼロベースのインデックスに設定すると、このエラーが発生しました。

0
ThorSummoner